C#正则表达可能被引号括起来的单词

时间:2016-02-06 04:08:03

标签: c# regex

对于我正在编写的C#程序,我使用正则表达式来查找特定模式,这个模式可能会也可能不会被括号括起来,但是,如果是,我想要包括他们在比赛中。

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

"\(?hello\)?"

但是,这并没有考虑到这个词必须有两个开括号和右括号才能符合条件。 因此,例如,如果我的搜索字符串是:

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

我希望获得以下4个匹配项:hello(hello) hellohello

具体来说,第二场比赛包括括号,但第3和第4场比赛不包括任何括号,因为它们不在开头和结束时#34;你好"

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

2 个答案:

答案 0 :(得分:4)

您只需使用an alternation即可匹配\(hello\)hello

\(hello\)|hello

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

答案 1 :(得分:2)

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

经过一番研究,我的最终模式已成为:

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

使用可选的捕获组和conditional backreferencing

同样,如果有人有更好的解决方案,请分享,但是,否则,希望这能成功帮助其他人!