我想匹配一个结构如下的行:
- 行首
- 多个' - '
- 可能有一个空格(也可能更多)
- 至少一个字符
- 可能有更多的字符和空格
- 可能有一个空格(也可能更多)
- 多个' - '
- 行尾
所以我写了这样的正则表达式:
new Regex(@"^\-{2,}\s*(\w+(\w+|\s)*)\s*\-{2,}$");
当我尝试匹配以下行时,这需要很长时间才能完成(没有等待它完成):
-------- Variable used for recipe visualization only - Not loaded into PLC --------
我认为其中有很多匹配项,使正则表达式枚举所有这些匹配项变得困难,但我不确定。
环境信息:Windows 7,框架3.5
谢谢
编辑:感谢您的帮助,我想出了一个可行的正则表达式:
^-{2,}\s*(?!\-)(\w(?:\w|\s|\-)+)(?<!\-)\s*-{2,}$
所以,这个解释是:
- 行首
- 至少两个“-”
- 可能有一个或多个空格
- 没有更多的“-”
- 至少一个字符
- 可能有更多的字符、空格或“-”
- 没有更多的“-”
- 可能有一个或多个空格
- 至少两个“-”
- 行尾
(\w+(\w+|\s)*)
。基本上,只要一系列空格保持不变,就允许单词和空格序列的任何分区。由于整个表达式不匹配,回溯将依次访问所有可接受的分区。尝试使用(\w+(\s+\w+)*)
替换它。 - collapsar