提问者:小点点

C#Regex表示可能被引号包围的单词


例如,假设我的模式是单词“hello”,我创建了这个正则表达式:

"\(?hello\)?"

但这并没有考虑到这个词必须同时有开始括号和结束括号才能作为匹配词。例如,如果我的搜索字符串是:

hello, (hello), (hello, my name is bob), (bob said hello)

我想要的是有以下4个匹配-你好(你好)你好你好

具体地说,第二匹配包括圆括号,但是第三和第四匹配不包括任何圆括号,因为它们不在"你好"的开头和结尾。

我可以使用什么样的正则表达式来实现这一点?


共2个答案

匿名用户

您可以简单地使用替换来匹配\(hello\)hello

\(hello\)|hello

由于正则表达式本质上是贪婪的,所以(Hello)将在Hello之前匹配,这意味着所有四个实例都将匹配。

匿名用户

在别人花太多时间之前,我确实找到了一个答案(但是如果你有更好的方法,请分享!!!)

经过一番研究,我的最终模式变成了:

(\()?hello(?(1)\))

它使用可选的捕获组和条件反向引用

再说一次,如果有人有更好的解决方案,请分享,否则,希望这能在将来帮助别人!