如何匹配正则表达式避免括号内的括号

时间:2017-09-22 03:33:11

标签: c# regex

我有像这样的字符串表达式

CONTAIN("A(ASDFASDF)","MAKLOON") &&  !CONTAIN("THIS IS THE (STRING) ","MAKLON") &&  !CONTAIN("ASDFASDF","MAKLUN") &&  ("121"=="" ||  121.00=="" ||  121.0=="")

我想只匹配这样的结果:

1. CONTAIN("A(ASDFASDF)","MAKLOON") 
2. CONTAIN("THIS IS THE (STRING) ","MAKLON")
3. CONTAIN("ASDFASDF","MAKLUN")

我试过这个正则表达式但匹配只有这个:

CONTAIN\(.*?\)

结果

1. CONTAIN("A(ASDFASDF)
2. CONTAIN("THIS IS THE (STRING)
3. CONTAIN("ASDFASDF","MAKLUN")

如何解决我的问题?感谢

3 个答案:

答案 0 :(得分:0)

您可以尝试以下模式:CONTAIN\(.*?"\)

答案 1 :(得分:0)

这是一个略微增强的版本,它允许内部字符串具有括号。它也不完美,但可能更安全一些:

CONTAIN\(".*?", ?".*?"\)

简要说明:匹配CONTAIN(,然后匹配任何字符,直到找到","", "(可选空格,如果您找到?永远不会有空间),然后再到任何角色,直到最后")?之后的*是必要的,以使其尽可能少地匹配。否则,.*将尽可能匹配,从第一个CONTAIN字符串开始。

除了匹配您在帖子中提到的内容外,还会匹配:

CONTAIN("HEL()LO",")WORLD(")
CONTAIN(")HELLO(",")WORLD(")

并且会匹配这些无效的字符串,这些字符串与其他建议的解决方案相匹配:

CONTAIN("HELLO",")WORLD()     // partial match
CONTAIN(")
CONTAIN(""")

我尝试做一些更复杂的正则表达式以匹配引号或括号的数量,但我认为您不需要这样的复杂性,除非您的字符串可能已转义引号,例如\"或{{1} }。

如果你不会得到任何这些无效的字符串或奇怪的字符串,那么对于其他更简单的正则表达式,你可能已经足够了。

答案 2 :(得分:-1)

我认为您正在寻找的正则表达式为:(CONTAIN\(\".+\"\))。通过包含\",您可以获得引号内的所有字符,而不是以')的第一个实例结束。