正则表达式在包含精确子字符串的括号之间找到整个子字符串

时间:2016-09-18 14:23:32

标签: python regex string substring parentheses

例如我有字符串:

"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" < / p>

3 个答案:

答案 0 :(得分:3)

您可以根据否定的字符类使用此正则表达式:

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

RegEx Demo 1

或者,您也可以使用此正则表达式基于负正则表达式:

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

RegEx Demo 2

  • (?!back|[()])是负面预测,声称当前位置在文本中没有back()
  • (?:(?!back|\)).)*?匹配任何未提前back()的字符中的0个或更多。
  • [^)]*匹配)以外的任何内容。

答案 1 :(得分: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]

答案 2 :(得分:0)

尝试以下模式以进行不情愿的匹配

图案=&#34; \&#34(* \。?);