正则表达式匹配匹配一个太多字符

时间:2013-10-04 08:57:16

标签: c# regex

我需要执行一个有点奇怪的正则表达式替换。我刚刚解决了问题,但并不完全。

我需要从字符串中删除多个子字符串,其中要删除的子字符串由方括号[] 包围,除了,其中方括号后面跟着两个主题标记[]##

例如,如果原始字符串是:

[phase]This is []a test [I]## of the emergency broadcast system. [28]##[test]xyz

然后正则表达式替换后的预期输出将是:

This is a test [I]## of the emergency broadcast system. [28]##xyz

到目前为止,我已经尝试了一些方法,但我提出的最接近的正则表达式模式字符串是"\[[^\]]*\][^##]"。这个问题是它匹配的角色多于应该的角色。例如,使用上面的测试字符串,并使用空字符串替换正则表达式,它返回:

his is  test [I]## of the emergency broadcast system. [28]##yz

我正在搜索的正则表达式模式字符串是什么?

2 个答案:

答案 0 :(得分:1)

你的问题是你的附加部分,

[^##]

将匹配#字符的下一个字符。您需要negative lookahead

\[[^\]]*\](?!##)

答案 1 :(得分:0)

"\[[^\]]*\][^##]"替换为"(\[[^\]]*\])(([^#]{2})?)"

首先,您的[^##]不遵循规则“,除非方括号后跟两个主题标签[] ## ”。因此必须将其更改为两个非锐化字符。

其次,尝试像这样替换:

var s= Regex.Replace(input, pattern, "$2");