Регулярное выражение для замены апострофа - PullRequest
0 голосов
/ 03 мая 2020

Мне нужно заменить все знаки препинания в данной строке, кроме " '", когда оно находится перед текстом, после и между. Для замены я использую replaceAll() с регулярным выражением "[!.,?;:/]|(?=.['])([^A-Za-z]')". Но это не работает с 5-м примером. Есть идеи как это сделать?

Примеры:

  1. " '" -> ""

  2. " '' '" -> ""

  3. " text'text " -> " text'text"

  4. " text ' "->" text'"

  5. " 'text"->" ' text"

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Совпадает с любым из символов или с апострофом, которому не предшествует или после которого не стоит символ слова.

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

[!.,?;:/]|(?<!\w)'(?!\w)

0 голосов
/ 03 мая 2020

Предоставленное регулярное выражение синтаксически недопустимо (2 открывающие скобки, 1 закрывающее), но это может быть опечатка.

Предлагаемое решение (только регулярное выражение):

(?<![a-zA-Z])'(?![a-zA-Z])

Отрицательный проверка на отсутствие проверки текста с последующим апострофом и отрицательная проверка на перспективу, снова проверка на отсутствие текста.

Возможно, вы захотите настроить класс символов, определяя 'text'.
Демо доступно здесь (Regex 101) .

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