伙计们!
我写了我需要的这种正则表达式
^((#\w+\b(\s?|#))+)
而且效果很好...但是只有here(在Javascript模式下)。
如您所见,它将高亮显示所有行,直到没有井号标签的文本开始为止(我只需要从文本的最开始就得到它们即可)。
如果我要在http://regexstorm.net/tester处尝试类似的操作(看起来我不需要完全捕获,那么ECMAScript选项也无济于事)
修复C#的最佳方法是什么?以及为什么它不能那样工作(因为regex101中的其他选项看起来都不错)?
最佳答案
主要问题是Regex101和RegexStorm站点之间的换行样式不同:第一个使用LF,第二个使用CRLF样式。因此,仅匹配1或0空格的\s?
在RegexStorm上找不到匹配项,因为在第一行的末尾和第二行的开始之间有两个空格。
您可以通过将\s?
更改为\s*
(或至少\s{0,2}
以匹配0到2空格)来解决它。
但是,您的正则表达式需要改进,因为这会给正则表达式引擎造成过多的开销。您可以将其线性写为
^#\w+(?:\s*#\w+)*
请参见RegexStorm regex demo。它匹配一个主题标签,后跟0+个0+空格序列和一个主题标签。
请注意,可以重新定义
^
以匹配行的开头。为避免这种情况,在.NET中,您可以使用始终与字符串开头匹配的\A
锚。图案细节:
^
(或\A
)-字符串的开头#\w+
-一个#
后跟1个以上的字符字符(?:\s*#\w+)*
-零个或多个序列:\s*
-零个或多个空格#\w+
-主题标签模式。