Regex для соответствия Оксфорду или последовательной запятой

Я изучил один Regex, чтобы смочь обнаружить предложения с Оксфордской запятой и предложения без. Например,

для предложения как ниже

I went to the store and bought eggs, milk, apples, butter, and bread.

Я буду использовать

(?:\w+,\s+){2,}and\s+\w+   

и для

I went to the store and bought eggs, milk, apples, butter and bread.

Я буду использовать

(?:\w+,\s+){1,}\w+\s+and\s+\w+. 

Это хорошо работает в Ультраредактировании с помощью Perl.

Однако я использую программное обеспечение под названием Studio SDL, и это - инструмент Cat (инструментальное средство для перевода), и это может использовать Regex, но по некоторым причинам это не принимает те Regex выше. Можно ли сообщить мне какую-либо другую формулу Regex, которая могла бы работать хорошо вместо вышеупомянутого, с помощью более стандартного механизма Regex?

0
задан 15 March 2017 в 15:42

1 ответ

Классы символов (\w, \s и другие), функция Perl regexes. Обычно поддерживаемая замена для этого была бы наборами символов в квадратных скобках: [a-zA-Z] для букв, [0-9] и [ \t\n] для пробела. Конечно, такой предполагает, что нет никаких других букв, чем 26 английских букв в плоскости ASCII, и игнорирует пару более редких пробельных символов также. Там также названы классами символов, как [[:alpha:]] та работа точно так же, но могла бы быть местами, в которых они не работают.

(?:...) также Perlism, которым можно заменить (...) если Вы не интересуетесь получением части соответствия в круглой скобке.

Так, я попытался бы повернуть первое РЕ в:

([[:alpha:]]+,[[:space:]]+){2,}and[[:space:]][[:alpha:]]+

или более простое, простое, и необщий:

([a-z]+, +){2,}and +[a-z]+ 

Обе работы с GNU grep с включенными расширенными регулярными выражениями (-E флаг командной строки), и являются несколько стандартными, но конечно что Ваша поддержка приложений не могла бы быть тем же. Следующая конструкция, которая будет проблемой, была бы {N,M} подсчет соответствия, которое является довольно раздражающим для замены, так как необходимо было бы повторить предыдущую группу. (Хотя примечание это (...){1,} точно то же как (...)+.)

Существует ссылка на обычном regexes в regex(7) страница справочника, и если Вы действительно хотите знать окровавленные детали и различия между вариантами, видит, Почему мое регулярное выражение работает в X, но не в Y? в Unix. SE.

2
ответ дан 3 November 2019 в 15:09

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

Похожие вопросы: