伙计们!

我写了我需要的这种正则表达式

^((#\w+\b(\s?|#))+)


而且效果很好...但是只有here(在Javascript模式下)。
 javascript - 一开始用于标签的正则表达式不适用于C#,但适用于Javascript-LMLPHP

如您所见,它将高亮显示所有行,直到没有井号标签的文本开始为止(我只需要从文本的最开始就得到它们即可)。

如果我要在http://regexstorm.net/tester处尝试类似的操作(看起来我不需要完全捕获,那么ECMAScript选项也无济于事)
javascript - 一开始用于标签的正则表达式不适用于C#,但适用于Javascript-LMLPHP

修复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+-主题标签模式。

07-24 18:28
查看更多