我有一个字符串,其中包含一组要使用正则表达式进行匹配的标记。每个标签都用逗号分隔,标签可以包含空格、特殊字符甚至表情符号。
输入示例
#
tag1, tag with space, !@#%^, 🦄
预期输出
1.标签1
1.用空格标记
1.!@#%
- 🦄
我已经使用以下C#代码成功地提取了标签,但感觉很笨拙,因为它严重依赖于拆分和修剪:
var match = Regex.Match(input, @"^#[\n](?<tags>[\S ]+)$");
// if match is a success
var tags = match.Groups["tags"].Value.Split(',').Select(x => x.Trim());
我的目标是创建一个正则表达式,它允许我迭代捕获并直接提取标记,而不需要额外的字符串操作。
有没有一种方法可以编写这样一个正则表达式,可以在C#中整洁有效地提取这些标记?理想情况下,正则表达式应该修剪前导或尾随空格,并处理单个记录中的可变数据字段。
3条答案
按热度按时间qyzbxkaa1#
此作品
(?ms)^\#\s+(?:\s*((?:(?!,|^\#\s+).)*?)\s*(?:,|$))+
它使用C#的 Capture Collection 来查找变量字段数据
在一个单一的记录。
您可以进一步扩展正则表达式,以便一次获取 * 所有 * 记录。
其中每个记录包含其自己的可变数量的字段数据。
正则表达式也有内置的修剪功能。
扩展:
C#代码:
输出:
aij0ehis2#
作弊没有错;]
pu3pd22g3#
你可以在没有regex的情况下完成它。就像这样分割: