Java regex: поиск строки без ударения в тексте с ударением - PullRequest
0 голосов
/ 27 марта 2019

В моем Java-приложении я хочу использовать регулярное выражение, чтобы узнать, существует ли строка в тексте или нет.

Случай, который я хочу охватить, таков: давайте предположим, что мой оригиналтекст - это следующий французский текст (с акцентом):

démo test

Я хочу знать, существует ли в тексте слово demo (без акцента), используя регулярное выражение.Дело в том, что я не могу изменить исходный текст (например, я не могу использовать Normalizer.normalize()), поскольку я использую библиотеку, которая принимает в качестве аргумента регулярное выражение.

Вот что япробовал:

  • Если я использую "(?i)démo", есть совпадение (поскольку существует démo)
  • Если я использую "(?i)demo", совпадения нет, но я такжехочу матч здесь.Я хочу, чтобы регулярное выражение было нечувствительным к акценту.

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

Есть ли какое-нибудь регулярное выражение, которое может охватыватьэто дело?

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Одним из способов является изменение литерала регулярного выражения для поиска и замены акцентированного
персонажи с классом.

 Regex string           Replace string
---------------------------------------------
Find any one          Replace with this lieral:
of these:

 [aâàä]         ->       [aâàä]
 [cç]           ->       [cç]
 [eéèêë]        ->       [eéèêë]
 [iîï]          ->       [iîï]
 [oô]           ->       [oô]
 [uùûü]         ->       [uùûü]
 [?œ]           ->       ????

Для этого необходимо выполнить 7 отдельных регулярных выражений в строке поиска.
Это будет глобальная находка / замена, семь раз.

0 голосов
/ 27 марта 2019

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

Если ваш вводимый текст находится в разложенном виде, то есть démo состоит из кодовых точек Unicode d e COMBINING ACUTE ACCENT m o, вы можете дополнительно выбрать акцент:

de\pM?mo

где \pM описывает свойство unicode "Метка" . Это будет соответствовать всем оценкам. Вы также можете просто дополнительно выбрать \u0301 напрямую, если вам нужен только этот точный акцент

Если ваш текст находится в составленной форме, то есть démo состоит из кодов Unicode d LATIN SMALL LETTER E WITH ACUTE m o, вам придется просто вручную сопоставить любой из них в регулярное выражение:

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