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

C#Regex表示可能被引号包围的单词,c#,regex,C#,Regex,对于我正在编写的C#程序,我使用正则表达式查找特定的模式,该模式可能被括号包围,也可能不被括号包围,但如果是,我希望将它们包含在匹配中 例如,假设我的模式是单词“hello”,我创建了这个正则表达式: "\(?hello\)?" 但这并没有考虑到这个词必须同时有开始括号和结束括号才能作为匹配词。 例如,如果我的搜索字符串是: hello, (hello), (hello, my name is bob), (bob said hello) 我希望有以下4个匹配项-hello,(hello)h

对于我正在编写的C#程序,我使用正则表达式查找特定的模式,该模式可能被括号包围,也可能不被括号包围,但如果是,我希望将它们包含在匹配中

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

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

hello, (hello), (hello, my name is bob), (bob said hello)
我希望有以下4个匹配项-
hello
(hello)
hello
hello

具体来说,第二个匹配包括括号,但第三个和第四个匹配不包括任何括号,因为它们不在“hello”的开头和结尾

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

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

\(hello\)|hello

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

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

经过一些研究,我的最终模式是:

(\()?hello(?(1)\))
使用可选的捕获组和


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

哦,呸!!!-这是一个简单而有效的解决方案我的想法变得更疯狂了。谢谢你@JohnBustos您的解决方案仍然非常聪明,在某些情况下,如果您不想重复字符串“hello”两次(假设它更复杂)它可能会更有用1+谢谢,Josh,但在这种情况下,我觉得您的解决方案倾向于简单,而且“嗯,可能有V8”的感觉。。。事实上我已经把你的加入到我的解决方案中了,它很有魅力只需等待10分钟,将其标记为解决方案。非常感谢。