Какой аромат Regular Expression используется в Python?

Я хочу, какой RegEx-Flavor используется для Python? Это PCRE, Perl-совместимый или это ICU или что-то еще?

3 ответа

Решение

Это достаточно совместимо с Perl, что означает, что большинство выражений Perl будут работать без изменений. Он стремится быть совместимым с Perl, но, конечно, есть небольшие отличия.

Технически, он использует собственный вид регулярных выражений. Например, именованные группы были предложены в регулярных выражениях Python задолго до того, как другие реализации приняли синтаксис. Он также поддерживает Unicode из коробки. В наши дни большинство расширений Python поддерживаются в других местах. См. http://docs.python.org/library/re.html

К сожалению, я не могу ответить прямо на комментарий, но атомарные блоки - важная особенность (хотя мало кто понимает их силу), так как вы можете создавать многобайтовые последовательности символов с его помощью. Т.е. в Windows символ новой строки \ r \ n.

Пример: /(?>\ R \n|\n|\r)\p{Any}/ соответствует \ n \ r или \r., Потому что это комбинация новой строки и любого символьного литерала, но это не соответствует \ r \ n, так как ничто не следует за переводом строки.

Здесь есть хороший обзор поддержки регулярных выражений в Python.

Подвести итог:

Единственными существенными особенностями, отсутствующими в синтаксисе регулярных выражений Python, являются атомарная группировка, собственнические квантификаторы и свойства Unicode.

Группировка атомов и собственнические квантификаторы не добавляют много выразительной силы языку. Они по существу для более простых и быстрых регулярных выражений.

Юникод поддерживается регулярным выражением Python в том смысле, что вы можете использовать буквальные символы Юникода, такие как Æ, но вы не можете использовать любые escape-коды Юникода в самом регулярном выражении.

Другие вопросы по тегам