1

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

我需要从一个字符串中删除多个子字符串,其中要删除的子字符串被方括号包围,[] 除非方括号后面跟着两个 hashtags []##

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

[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

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

4

2 回答 2

1

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

[^##]

将匹配下一个不是# 字符的字符。你需要一个消极的前瞻

\[[^\]]*\](?!##)
于 2013-10-04T09:05:18.787 回答
0

将您的替换"\[[^\]]*\][^##]""(\[[^\]]*\])(([^#]{2})?)".

首先,您[^##]不遵守规则“除非方括号后面跟着两个标签 []## ”。因此必须将其更改为两个非 sharpsigh 字符。

其次,尝试像这样替换:

var s= Regex.Replace(input, pattern, "$2");
于 2013-10-04T09:05:07.360 回答