Я занимаюсь довольно простым регулярным выражением на питоне и вижу некоторое нечетное поведение, когда я использую оператор «или».Python регулярное выражение между символами
Я пытаюсь разобрать следующее:
>> str = "blah [in brackets] stuff"
так, что она возвращает:
>> ['blah', 'in brackets', 'stuff']
Чтобы соответствовать тексту в квадратных скобках, я использую вид сзади и смотреть вперед, то есть:
>> '(?<=\[).*?(?=\])'
Если используется один, это действительно фиксирует текст в скобках:
>> re.findall('(?<=\[).*?(?=\])' , str)
>> ['in brackets']
Но когда я объединить или оператора для разбора строк между пространствами, скобка-матч как-то ломается:
>> [x for x in re.findall('(?<=\[).*?(?=\])|.*?[, ]' , str) if x!=' ' ]
>> ['blah', '[in ', 'brackets] ']
Для жизни меня я не могу понять это поведение. Любая помощь будет оценена по достоинству.
Спасибо!
Это может помочь - https://regex101.com/r/xM7sK0/1 - на левой стороне вы можете перейти в отладчик, где он будет объяснить, как он соответствовал тому, что он делал. – TessellatingHeckler
Спасибо, это действительно полезно. – FrancisWolcott
Проблема в том, что вторая половина регулярного выражения также соответствует скобкам. После первого совпадения («бла») оставшийся текст «[в скобках]». Первая половина регулярного выражения здесь не соответствует, потому что lookbehind не находит открывающую скобку. Итак, вторая половина регулярного выражения снова совпадает и находит текст «[in». –