python регулярное выражение неожиданных групп совпадений - PullRequest
3 голосов
/ 11 июля 2020

Я пытаюсь найти все вхождения "_"+digit или "^"+digit, используя регулярное выражение ((_\^)[1-9])

Группы, которые я ожидал бы получить, например, для "X_2ZZZY^5", будут [('_2'), ('^5')], но вместо этого я получаю [('_2', '_'), ('^5', '^')]

Неправильно ли мое регулярное выражение? Или мое ожидание того, что будет возвращено, неверно?

Большое спасибо

** мой оригинальный повторно использованный (_|\^) это было неправильно, и должно было быть (_\^) - вопрос был изменен соответственно

Ответы [ 2 ]

2 голосов
/ 11 июля 2020

У вас есть 2 группы в вашем регулярном выражении, поэтому вы получаете 2 группы. И вам нужно сопоставить хотя бы 1 следующее число.

попробуйте следующее:

([_\^][1-9]+)

Посмотрите в действии здесь

2 голосов
/ 11 июля 2020

Требовать не менее 1 di git (1-9) после специальных символов _ или ^, помещенных в одну группу захвата:

import re

text = "X_2ZZZY^5"
pattern = r"([_\^][1-9]{1,})"
regex = re.compile(pattern)
res = re.findall(regex, text)
print(res)

Возвращение:

['_2', '^5']
...