Python re регулярное сопоставление с метаматчером в начале паттерна - PullRequest
2 голосов
/ 30 апреля 2020

У меня есть код, который динамически создает повторные шаблоны для сопоставления, но один из них создает проблему:

pattern = re.compile('* sauce')

Дает мне ошибку: ничего не повторяется в позиции 0.

Когда звезда где-то еще, она работает хорошо. Я пытаюсь сопоставить любое слово вместо *. Я пытался найти шаблоны регулярных выражений, но не могу найти что-то, чтобы заменить это.

Примеры:

'* sauce'

#should match:

'apple sauce'
'mustard sauce'

#or

'blue * red'

#should match:

'blue and red'
'blue or red'

et c.

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

В регулярном выражении * означает, что количество вхождений будет 0 или более раз ...

Так что, если вы разрешите любую защиту, вам нужно будет использовать \w. \ w allow [a-zA-Z0-9_] символов ...

Если вы хотите разрешить любое слово, которое состоит из этих символов, используйте: \b\w+\b ..

Если ваше слово состоит из любого символа, то Вы можете использовать .* ....

Так что вы можете попробовать с '\b\w+\b? sauce' или '.*? sauce'

1 голос
/ 30 апреля 2020

Прошло много времени с тех пор, как я возился с регулярным выражением, но я верю, что * означает, что он попытается сопоставить 0 или n числа предыдущего блока или символа. Поскольку до * ничего нет, в этом случае вы столкнетесь с этой ошибкой. Вы можете исправить это, поместив несколько символов перед * или экранировав *.

edit

После просмотра примера, я думаю, вам нужен шаблон регулярного выражения, равный .* sauce или .*sauce, если вас не волнует пространство.

...