2016-09-18 43 views
1

比如我有串:正则表达式找到括号之间的整串包含确切的子

"one two (78-45ack sack); now (87 back sack) follow dollow (59 uhhaaa)" 

,我需要用括号只是整个字符串,包含词"back",该字符串将是:

"(87 back sack)" 

我已经试过:

(\(.*?back.*?\)) 

但它的返回"(78-45ack sack); now (87 back sack)"

我的正则表达式应该如何?据我了解,这是发生原因搜索从字符串开始,共同 - 如何执行正则表达式到"search"从字符串中间,从字"back"

回答

3

你可以使用这个表达式基于否定字符类:

\([^()]*?back[^()]*\) 
  • [^()]*匹配0或更多,是不是(),从而确保我们不会跨越匹配任何字符一对(...)

RegEx Demo 1


另外,您还可以使用基于负正则表达式这个表达式:

\((?:(?!back|[()]).)*?back[^)]*\) 

RegEx Demo 2

  • (?!back|[()])是断言,目前PO负前瞻sition在文中未提前back()
  • (?:(?!back|\)).)*?匹配0个或更多的任何字符,它们没有back()
  • [^)]*只匹配)
+1

让人印象深刻!你如何得到这些想法? –

+0

你为什么在否定字符类中加入左括号? – wwii

+0

要照顾不平衡的一对“(...)”,例如'一个两(78-45ack袋;现在(87后袋)跟随dollow(59 uhhaaa)' – anubhava

0
h="one two (78-45ack sack); now (87 back sack) follow dollow (59 uhhaaa)" 
l=h.split("(") 
[x.split(")")[0] for x in l if ")" in x and "back" in x] 
0

尝试以下方式进行不愿匹配

模式= “\(。*?\)”

相关问题