Как я могу получить строку, которая заканчивается одним из двух символов, и заменить этот последний символ условно регулярным выражением? - PullRequest
1 голос
/ 27 июня 2019

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

ДляНапример, текст ниже:

-hi there.
-hello-.
It's nice -said while looking at the window- if you could come.

Необходимо заменить на

—hi there.
—hello—.
—good morning —he said.

Но эти тире должны остаться без изменений:

1992-1994
MTS-O

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

–(.+?)–
–(.+?)\.

С одним, который соответствует тире или точке в конце, и позвольте мне сделать быструю замену, которая условно заменяет черту en, когда это совпадает или сохраняет точку, если совпадает.

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Может быть, вы можете согласиться с простым шаблоном, как предложено.Но это может вызвать проблемы с некоторыми крайними случаями.Требуется немного больше, чтобы выполнить все ваши требования.

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

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

(?=^-.*[.-]$)-|\G(?!^).*\K-

Сначала проверьте всю строку с помощью заглядывания: (?=^-.*[.-]$).Если у нас есть совпадение, мы находимся в позиции 1.

Затем мы ищем первый тире для его замены, а затем альтернативу \ G-continue для соответствия последующим тире, которые не находятся в начальной позиции (?!^).Мы переходим к следующему - с .* и используем \K, чтобы бросить все перед ним.Весело, правда?

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

0 голосов
/ 27 июня 2019

Я предполагаю, что, возможно, эти простые выражения,

(?=-)-

или, точнее, заканчивающиеся на .:

(?=-.*\.$)-

простой заменой , могутРабота.

Демо

...