I am trying to write a regex to replace the whole square bracket with the first choice. For example, [ choice A | choice B ] I want to replace the previous square bracket as a whole with choice A. However, when I have more than one of these brackets:
[ choice A | choice B ] and choose between [ choice D | choice F ]
in the same line, all the brackets get replaced by choice A. I know it’s because I am selecting [0] in my code, but I don’t know how to replace each bracket with its respective choice; namely, choice A and choice D
import re line = "[ choice A | choice B ] and choose between [ choice D | choice F ]" x = re.findall( r"[(.*?)|", line)[0].strip() line = re.sub(r"[(.*?)]", x,line) print(line)
Advertisement
Answer
You can use
import re line = "[ choice A | choice B ] and choose between [ choice D | choice F ]" line = re.sub(r"[s*([^][|]*?)s*|[^][]*]", r"1", line) print(line) # => choice A and choose between choice D
See the Python demo and the regex demo. The regex matches
[– a[chars*– zero or more whitespaces([^][|]*?)– Group 1 (1in the replacement pattern refers to this value): zero or more chars other than[,]and|, as few as possibles*|– zero or more whitespaces and a|char[^][]*– any zero or more chars other than]and[]– a]char.