Regex find whole substring between parenthesis con

2019-08-05 08:34发布

问题:

For example I have string:

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

and I need only whole substring with parenthesis, containing word "back", for this string it will be:

"(87 back sack)"

I've tried:

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

but it's return "(78-45ack sack); now (87 back sack)"

How should my regex look like? As I understood it's happening cause search going from begin of the string, in common - how to perform regex to "search" from the middle of string, from the word "back"?

回答1:

You can use this regex based on negated character class:

\([^()]*?back[^()]*\)
  • [^()]* matches 0 or more of any character that is not ( and ), thus making sure we don't match across the pair of (...).

RegEx Demo 1


Alternatively, you can also use this regex based on negative regex:

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

RegEx Demo 2

  • (?!back|[()]) is negative lookahead that asserts that current position doesn't have back or ( or ) ahead in the text.
  • (?:(?!back|\)).)*? matches 0 or more of any character that doesn't have back or ( or ) ahead.
  • [^)]* matches anything but ).


回答2:

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]


回答3:

Try the below pattern for reluctant matching

pattern="\(.*?\)"