人!
我写了这种我需要的正则表达式
^((#\w+\b(\s?|#))+)
它工作正常......但只有here(在Javascript模式下)。
正如你所看到的,它会突出显示所有行,直到没有标签符号开头的文本开始(我只需要从文本的最开头获取它们)。
如果我在http://regexstorm.net/tester尝试这样的事情,它看起来就像这样(所以我不需要完全捕获部分,ECMAScript选项也没有帮助)
为C#修复它的最佳方法是什么?为什么它不能那样工作(因为在regex101的其他选项中,一切看起来都不错)?
答案 0 :(得分:2)
主要问题是Regex101和RegexStorm站点之间的换行符风格的区别:第一个使用LF而后者使用CRLF样式。因此,\s?
仅匹配1或0个空格无法在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+
- 标签模式。