Я изучил один 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?
Классы символов (\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.