regex: обрезать все строки, непосредственно предшествующие цифре, за исключением случаев, когда строка принадлежит предопределенному набору строк - PullRequest
1 голос
/ 07 мая 2010

У меня есть адреса, которые мне нужно очистить для соответствия целей.Частью процесса является обрезка нежелательных значений по номерам, например:

mainstreet 4a --> mainstreet 4. 

Однако я не хочу:

618 5th Ave SW  --> 618 5 Ave SW 

другими словами, есть некоторые строки (на данный момент: stя не хочу раздеться.Каков наилучший способ сделать это (регулярное выражение или иначе)?

регулярное выражение wokring без исключений будет:

a = a.replaceAll("(^| )([0-9]+)[a-z]+($| )","$1$2$3"); //replace 1a --> 1

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

Спасибо

1 Ответ

0 голосов
/ 07 мая 2010

Вы, вероятно, могли бы сделать это с негативным прогнозом:

a = a.replaceAll("(^| )([0-9]+)(?!th|nd|etc)[a-z]+($| )","$1$2$3"); //replace 1a --> 1

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

a = a.replaceAll("(?<=^| )([0-9]+)(?!th|nd|etc)[a-z]+(?= |$)", "$1"); //replace 1a --> 1 but not 2nd --> 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...