对于我正在编写的C#程序,我使用正则表达式来查找特定模式,这个模式可能会也可能不会被括号括起来,但是,如果是,我想要包括他们在比赛中。
例如,假设我的模式只是单词"hello"
,我创建了这个正则表达式:
"\(?hello\)?"
但是,这并没有考虑到这个词必须有两个开括号和右括号才能符合条件。 因此,例如,如果我的搜索字符串是:
hello, (hello), (hello, my name is bob), (bob said hello)
我希望获得以下4个匹配项:hello
,(hello)
hello
,hello
具体来说,第二场比赛包括括号,但第3和第4场比赛不包括任何括号,因为它们不在开头和结束时#34;你好"
我可以使用什么样的正则表达式来实现这一目标?
答案 0 :(得分:4)
您只需使用an alternation即可匹配\(hello\)
或hello
:
\(hello\)|hello
由于正则表达式本质上是贪婪的,(hello)
将在hello
之前匹配,这意味着所有四个实例都将匹配。
答案 1 :(得分:2)
在其他人花费太多时间之前,我确实找到了答案(但如果你有更好的方法,请分享!!!)
经过一番研究,我的最终模式已成为:
(\()?hello(?(1)\))
使用可选的捕获组和conditional backreferencing
同样,如果有人有更好的解决方案,请分享,但是,否则,希望这能成功帮助其他人!