繁体   English   中英

正则表达式匹配超过一个字符

[英]Regex match matches one too many characters

我需要执行一些奇怪的正则表达式替换。 我已经解决了,但还不完全是。

我需要从一个字符串中删除多个子字符串,其中要删除的子字符串由方括号[]包围, 除了在方括号后跟两个标签[]##

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

[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})?)"

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

其次,尝试像这样替换:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM