Home > Mobile >  How to use regular expressions to match digits inside parentheses?
How to use regular expressions to match digits inside parentheses?

Time:08-19

I'm struggling with regular expressions.

Here is an example string:

(1-3) XD(4-18):SP(19-36) (37-96)

How would I extract the digits from the parentheses that are not preceded by SP or XD so that my result would be:

[1-3, 37-96]

Right now I am trying something like:

re.findall(r'[:|\ ]\([0-9] -[0-9] \)', '(1-3) XD(4-18):SP(19-36) (37-96)')

But this returns:

[' (37-96)']

It misses the first (1-3) capture (because I cannot figure it out) and I also have to then operate on the substring returned from the match to extract the digits.

Is there a better way to do this?

CodePudding user response:

Use a negative lookbehind to exclude SP and XD, rather than explicitly matching : and .

And if you don't want the results to include the parentheses, put a capture group around the numbers. Then re.findall() only returns the capture groups, not the matches.

re.findall(r'(?<!SP|XD)\((\d -\d )\)', '(1-3) XD(4-18):SP(19-36) (37-96)')

DEMO

  • Related