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

Regex find whole substring between parenthesis containing exact substring

例如我有字符串:

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

我只需要带括号的整个子字符串,包含单词 "back",对于这个字符串它将是:

"(87 back sack)"

我试过:

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

但它是 return "(78-45ack sack); now (87 back sack)"

我的正则表达式应该是什么样的?据我了解,它的发生导致搜索从字符串的开头开始,共同点 - how to perform regex to "search" from the middle of string, from the word "back"?

您可以根据取反字符使用此正则表达式 class:

\([^()]*?back[^()]*\)
  • [^()]* 匹配 0 个或多个非 () 的字符,从而确保我们不匹配 (...) 对。

RegEx Demo 1


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

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

RegEx Demo 2

  • (?!back|[()]) 是否定前瞻,断言当前位置在文本中没有 back()
  • (?:(?!back|\)).)*? 匹配 0 个或多个前面没有 back() 的字符。
  • [^)]* 匹配除 ).
  • 之外的任何内容
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]

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

pattern="\(.*?\)"