Reputation: 406
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"
?
Upvotes: 2
Views: 1286
Reputation: 3822
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]
Upvotes: 0
Reputation: 785058
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 (...)
.Alternatively, you can also use this regex based on negative regex:
\((?:(?!back|[()]).)*?back[^)]*\)
(?!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 )
.Upvotes: 5