Следует ли регулярное выражение Python общего соответствия конкретному соответствию? - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть следующие. regex:

test1|test123

Это соответствует только test1, но не test123 - сначала я должен указать более общий? Как test123 | test1?

Ответы [ 2 ]

3 голосов
/ 30 сентября 2019

Да, в действительности X | Y в мире регулярных выражений означает X или (не X и Y), примененные к каждому символу. Таким образом, test1 | test123 никогда не будет соответствовать test123, потому что он уже соответствует test1.

0 голосов
/ 15 октября 2019
stri = "abcd"
regex1 = "(?P<group1>ab)|(?P<group2>cd)"
regex2 = "(?P<group1>ab).*(?P<group2>cd)"
y = re.match(regex1,stri)
if y:
    if y.group("group1"):
        print y.group("group1")
    if y.group("group2"):
        print y.group("group2")

Первое регулярное выражение (регулярное выражение 1) будет соответствовать только группе 1, поскольку экземпляр y может принять только одно совпадение регулярного выражения в обоих случаях, и, очевидно, это будет первое совпадение. Второе (regex2) может соответствовать обеим группам, потому что это будет один и тот же объект соответствия для group1 и group2.

Если вы хотите захватить обе группы с помощью '|'сам оператор, то вы можете сделать это как

regex1 = re.compile("(?P<group1>ab)|(?P<group2>cd)")
for y in regex1.finditer(stri):
    if y.group("group1"):
        print y.group("group1")
    if y.group("group2"):
        print y.group("group2")
...