Неправильное соответствие регулярному выражению - PullRequest
0 голосов
/ 09 апреля 2020

Поэтому я использую модуль re для компиляции своего регулярного выражения, и мое регулярное выражение выглядит следующим образом:

"(^ ~ \ w +? [& ~ \ w +? ] *? $) "

Поэтому я компилирую его с использованием pattern = re.compile (regex), а затем использую re.findall (pattern, string), чтобы найти, соответствует ли данная строка, и дайте мне группу, если она есть.

Строка, с которой я сопоставляю: "v1 V ~ v2_ V ~~ v3".

Я ожидаю, что совпадения не будет, но там написано что это соответствует регулярному выражению. Я подозреваю, что \ w + соответствует пробелам, так что он соответствует всей строке, но я не смог найти в документации, которая является правильной. Что мне не хватает?

Вот это минимально воспроизводимый пример:

import re

test_string = "v1 V ~v2_ V ~~v3"
regex = "(^~*\w+?[ & ~*\w+?]*?$)"

pattern = re.compile(regex)
for elem in re.findall(regex, test_string):
    print(elem)

1 Ответ

0 голосов
/ 09 апреля 2020

Если вы ожидаете, что не совпадете, я думаю, что ваша проблема связана с [ & ~*\w+?]* part. Символы в квадратных скобках означают одно вхождение, в данном случае одно вхождение &, ~, *,?, word и space. А звездочка (*) в конце делает ноль или много вхождений того, что в скобках.

Если вы хотите, чтобы это совпадение было с под-регулярным выражением & ~*\w+? ноль или более раз, используйте круглые скобки.

Поэтому я бы сказал, что вы хотите это регулярное выражение: (^~*\w+?( & ~*\w+?)*?$) (просто поменяйте скобки для скобок.

...