I am trying to match the middle whitespace out of 3 whitespaces in a row.
I want to only match the middle whitespace but only if it precedes a |
. The actual text I have to match from is this:
--- --- ---
| | | |
--- --- ---
I can match 2 whitespaces in a row that precede |
with (?<!\|)\s{2}
(the x
s represent the matches) but I only want to match the x
in the middle
--- --- ---
| xx| xx| xx|
--- --- ---
CodePudding user response:
What if you try to split the string and use white space as separator, get the substring in the middle then match it to the regex pattern?
CodePudding user response:
You can use grouping to get these specific spaces:
The bolded section relates to the spaces that you want:
(|\s{3}|\s)(\s{2})(|\s{3}|)
Code:
import re
text = """
--- --- ---
| | | |
--- --- ---
"""
pattern = re.compile(r"(\|\s{3}\|\s)(\s{2})(\|\s{3}\|)")
match = pattern.search(text)
print(match.group(2))
Here is a regex101 : demo
- group(0) matches the entire pattern from start to end.
| | | |
- group(1) matches the pattern before the whitespace of interest
- group(2) matches the whitespace of interest
- group(3) matches the pattern after the whitespace of interest