Ruby Regex vs Python Regex - PullRequest
       0

Ruby Regex vs Python Regex

7 голосов
/ 15 апреля 2011

Есть ли реальные различия между регулярным выражением Ruby и регулярным выражением Python?

Мне не удалось найти никаких отличий в этих двух, но, возможно, что-то пропустило.

Ответы [ 5 ]

7 голосов
/ 15 апреля 2011

В последний раз, когда я проверял, они существенно отличались поддержкой Unicode. Ruby в 1.9, по крайней мере, имеет очень ограниченную поддержку Unicode. Я считаю, что одно или два свойства Unicode могут быть поддержаны в настоящее время. Вероятно, общие категории и, возможно, сценарии были двумя, о которых я думаю.

В Python все больше и больше поддерживается Unicode. Кажется, Python позволяет удовлетворить требования RL1.2a "Свойства совместимости" из UTS # 18 для Регулярные выражения Unicode .

Тем не менее, есть очень хорошая библиотека Python от Matthew Barnett (mrab), которая наконец добавляет пару свойств Unicode в регулярные выражения Python. Он поддерживает две наиболее важные из них: общие категории и свойства скрипта. У него есть и другие интригующие особенности. Это заслуживает хорошей рекламы.

Я не думаю, что ни Ruby, ни Python не поддерживают Unicode все это так хорошо, хотя с каждым днем ​​все больше и больше делается. В частности, однако, ни то, ни другое не отвечает даже требованиям уровня 1 для регулярных выражений Unicode, приведенным выше. Например, RL1.2 требует поддержки как минимум 11 свойств: General_Category, Script, Alphabetic, Uppercase, Lowercase, White_Space, Noncharacter_Code_Point, Default_Ignorable_Code_Point, ANY, ASCII, и ASSIGNED.

Я думаю, что Python позволяет вам только некоторые из них, и только окольным путем. Конечно, есть много, много других свойств, помимо этих 11.

Когда вы ищете поддержку Юникода, конечно, в регулярных выражениях есть нечто большее, чем просто UTS # 10, хотя именно этот вопрос наиболее важен для этого вопроса, и ни Ruby, ни Puython не соответствуют уровню 1. Другими очень важными аспектами Unicode являются UAX # 15, UAX # 14, UTS # 18, UAX # 11, UAX # 29 и, конечно, решающий UAX # 44. Я знаю, что в Python есть библиотеки как минимум для пары из них. Я не знаю, что они стандартные.

Но когда дело доходит до поддержки регулярных выражений ... 1019 * есть более богатых альтернатив, чем эти два, вы знаете. :)

5 голосов
/ 15 апреля 2011

Мне нравится синтаксис / pattern / в Ruby, вдохновленный Perl, для регулярных выражений. Re.compile Python ("шаблон") не очень элегантно для меня. Синтетический сахар в Ruby и тот факт, что регулярные выражения являются отдельным модулем re в Python, заставляют меня склоняться к Ruby, когда речь идет о регулярных выражениях.

Кроме этого, я не вижу большой разницы с точки зрения программирования обычного регулярного выражения. Оба языка имеют довольно полную и в основном похожую поддержку RE. Могут быть различия в производительности (традиционно Python имеет лучшую производительность), а также Python имеет большую поддержку регулярных выражений Юникода.

2 голосов
/ 16 апреля 2011

Если вопрос касается только регулярных выражений: ни того, ни другого. Используйте Perl.

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

Если вы действительно выбираете только язык, основанный на поддержке регулярных выражений - выберите Perl ...

1 голос
/ 06 ноября 2014

Метод Regexp#match Руби эквивалентен re.search() Python, а не re.match().re.search() и Regexp#match ищут первое совпадение в любом месте строки.re.match() ищет совпадение только в начале строки.

Чтобы выполнить эквивалент re.match(), регулярное выражение Ruby должно начинаться с ^, указывая на совпадение началастрока.

Чтобы выполнить эквивалент Regexp#match, регулярное выражение Python должно начинаться с .*, указывая на совпадение нуля или более символов.

1 голос
/ 15 апреля 2011

Библиотеки регулярных выражений для Ruby и Python разработаны двумя совершенно независимыми командами.Даже если они идентичны сейчас (и я не был бы уверен, что они есть), нет никакой гарантии, что они когда-нибудь не разойдутся в будущем.

Самая безопасная позиция - предположить, что они сейчас другие,и предположим, что в будущем они будут другими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...