Соединение двух регулярных выражений вместе

1

У меня есть два регулярных выражения: одно совпадение для всех символов [az] и другое, исключая следующую комбинацию символов [^spuz(ih)] (символы s, p, u, z, ih), как бы объединить эти два что я могу разрешить все буквенно-цифровые символы, кроме тех, которые указаны во втором RE?

(re.match(r'^[a-z]*(?![spuz]|ih)[a-z]s$', insert_phrase)
  • 0
    Ваш этот regex - [^spuz(ih)] не соответствует тому, что вы думаете, что он соответствует. Вы не можете захватить группу в классе персонажей. Таким образом, это исключает: - s, p, u, z, (, i, h, )
  • 0
    Хорошо, в таком случае есть ли способы, где я могу исключить захваченные группы?
Показать ещё 4 комментария
Теги:

1 ответ

3
Лучший ответ

Вы не можете "комбинировать" их как таковые, но вы можете написать другое регулярное выражение, которое имеет такой же эффект. Для этого вы можете использовать конструкцию (?!). Он соответствует 0 символам, только если регулярное выражение в нем не соответствует следующей части. Таким образом, вы можете использовать:

'(?![spuz(ih)])[a-z]'

Или, поскольку это было не то, что вы хотели, измените его на:

'(?![spuz]|ih)[a-z]'

В измененном вопросе вам кажется, что вместо этого вы видите отрицательный lookbehind. Это превращает шаблон в:

'^[a-z]*(?<![a-z][spuz]|ih)s$'

Обратите внимание на дополнительную [az] в части lookbehind. Это необходимо, потому что выражения lookbehind должны быть фиксированной шириной. Это означает, что строка, подобная "ps", будет соответствовать шаблону, но вы этого не хотите. Поэтому вместо этого лучше использовать два отдельных lookbehinds (оба из которых должны быть истинными для соответствия строки):

'^[a-z]*(?<![spuz])(?<!ih)s$'
  • 3
    В качестве дополнения шаблон, который использует (?! YourPatternHere), называется негативным прогнозом. Это непотребляющее совпадение в вашем шаблоне. Вы также можете создавать положительные шаблоны прогнозирования, которые также не потребляют символы, но будут следить за тем, чтобы совпадающие символы присутствовали в выражении, возвращающем true.
  • 0
    Хорошо после некоторого тестирования кажется, что мой код, основанный на вышеупомянутом, не работает, все еще, кажется, не игнорирует сгруппированные символы, я добавлю свой код выше
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню