регулярное выражение: сопоставить точку без пробела после - PullRequest
0 голосов
/ 19 февраля 2020

Я хотел бы найти все знаки пунктуации в строке, кроме /, #, $ и точки без пробела после (например, . net)

Я сделал это пока.

?!['\/#$])\p{P}

Теперь мне нужно обработать точку без пробела после.

Если у кого-то есть идея ...

Я использую Java .
Например, мне нужно заменить все знаки препинания на "" (пустой символ), кроме точки без пробела после:

. net, asp. net привет. мир, c#

становится

. net asp. net привет мир c#

Ответы [ 3 ]

1 голос
/ 19 февраля 2020

Вы можете добавить альтернативу в свой отрицательный взгляд:

(?![/#$]|\.(?!\s))\p{P}
        ^^^^^^^^^

См. Демоверсию regex .

Подробности

  • (?![/#$]|\.(?!\s)) - провалить совпадение, если сразу направо, /, # или $, или . не сопровождается символом пробела
  • \p{P} - любая пунктуация правильного символа
1 голос
/ 19 февраля 2020

Это регулярное выражение соответствует вашему варианту использования:

(?!\.\w)(?!['\/#$])\p{P}

Возможно, вам придется внести изменения (например, \p{P}) для использования в Java, см. Регулярные выражения в Пунктуация

https://regex101.com/r/xtBfYt/1

1 голос
/ 19 февраля 2020

Я бы использовал следующее:

[\]!"%&'()*+,:;<=>?@[\\^_`{|}~-]|\.(?![a-zA-Z0-9])

Класс символов [!"%&'()*+,:;<=>?@[\]^_`{|}~-] соответствует любому символу \p{P}, за исключением /, #, $ и ., а также другая альтернатива соответствует точке, за которой не следует ни буквы, ни ди git.

Обратите внимание, что заманчиво использовать \b, но это плохая идея, поскольку \w включает в себя _ в дополнение на [a-zA-Z0-9].

Если вы хотите продолжать использовать \p{P}, вы можете использовать следующее, но ожидать меньших результатов:

(?![/#$]|\.[a-zA-Z0-9])\p{P}

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

[\p{P}&&[^/#$.]]|\.(?![a-zA-Z0-9])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...