Regular Expression For Printing Integers Within Brackets
First time ever using regular expressions and can't get it working although there's quite a few examples in stackoverflow already. How can I extract integers which are in a string
Solution 1:
If you need to fail the match in [ +-34 ]
(i.e. if you needn't extract a negative number if there is a +
before it) you will need to use
\[\s*(?:\+|(-))?(\d+)\s*]
and when getting a match, concat the Group 1 and Group 2 values. See this regex demo.
Details
\[
- a[
char\s*
- 0+ whitespaces\+?
- an optional+
char(-?\d+)
- Capturing group 1 (the actual output ofre.findall
): an optional-
and 1+ digits\s*
- 0+ whitespaces]
- a]
char.
In Python,
import re
text = "dijdi[d43] d5[55++][ 43] [+32]dm dij [ -99]x"
numbers_text = [f"{x}{y}"for x, y in re.findall(r'\[\s*(?:\+|(-))?(\d+)\s*]', text)]
numbers = list(map(int, numbers_text))
# => [43, 32, -99] for both
Solution 2:
If you've not done so I suggest you switch to the PyPI regex module. Using it here with regex.findall
and the following regular expression allows you to extract just what you need.
r'\[ *\+?\K-?\d+(?= *\])'
regex engine¯\(ツ)/¯Python code
At the regex tester pass your cursor across the regex for details about individual tokens.
The regex engine performs the following operations.
\[ : match'['
\ * : match0+ spaces
\+? : optionally match'+'
\K : forget everything matched so far and reset
startofmatchtocurrent position
-? : optionally match'-'
\d+ : match1+ digits
(?=*\]) : use positive lookahead to assert the last digit
: matched is followed by0+ spaces then']'
Post a Comment for "Regular Expression For Printing Integers Within Brackets"