Работа с регулярным выражением Java, которое будет соответствовать «es» или «s» в конце строки и возвращает подстроку без этого суффикса. Кажется легким, но я не могу заставить «e» соответствовать выражению, которое я пытаюсь.Регулярное выражение: совпадение множественных случаев в конце строки
Вот результат я должен получить:
"дюймов" -> "дюйм"
"метров" -> "метр"
"унций" -> «ounc "
но с этим регулярным выражением:
Pattern.compile("(.+)(es|s)$", Pattern.CASE_INSENSITIVE);
Я на самом деле получаю: - "+"
"дюймы"> "Инч"
После некоторых исследований я обнаружил, что часть моего поиска слишком жадная, и изменить его на это:
Pattern.compile("(.+?)(es|s)$", Pattern.CASE_INSENSITIVE);
устраняет проблему. Мой вопрос, однако, почему «совпадение» вообще? Если «жадным» характером алгоритма была проблема, не должна ли она соответствовать целой строке?
Это может быть строка за строкой, а не многострочная. Получили ли вы только один результат, или вы тоже «метнули» и «унцию»? – Derek
Казалось бы, вы пытаетесь разобрать английский язык, который я не считаю обычным языком. Я думаю, вам нужно будет посмотреть на обработку естественного языка, если только вы не имеете дело с очень маленьким подмножеством слов. – npinti
Взгляните на [* Greedy vs. Reuctant vs. Possessive Quantifier *] (http://stackoverflow.com/questions/5319840/greedy-vs-reluctant-vs-possessive-quantifiers). –