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

问题描述 投票:0回答:3

例如我有字符串:

"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)"

我的正则表达式应该是什么样的?据我所知,它的发生是因为搜索从字符串的开头开始,共同点 - how to perform regex to

"search"
from the middle of string, from the word
"back"
?

python regex string substring parentheses
3个回答
4
投票

您可以使用基于否定字符类的正则表达式:

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

正则表达式演示 1


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

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

正则表达式演示 2

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

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
投票

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

pattern="\(.*?\)"

© www.soinside.com 2019 - 2024. All rights reserved.