java.util.regex соответствует чему-либо до выражения - PullRequest
1 голос
/ 22 июня 2010

Я пытаюсь токенизировать следующие фрагменты по типам чисел:

"(0-22) 222-33-44, 222-555-666, tel./.fax (111-222-333) 22-33-44 UK, TEL/faks: 000-333-444, fax: 333-444-555, tel: 555-666-888"

и

"tel: 555-666-888, tel./fax (111-222-333) 22-33-44 UK"

и

"fax (111-222-333) 22-33-44 UK, TEL/faks: 000-333-444, fax: 333-444-555"

и т. Д.

Концепция заключается в том, что это может быть любая комбинация, например, "tel / faks" и "номера tel / fax" после него, или просто "номер tel / fax" в начале строки.

Я делаю это:

"(?:.(?!((tel|fax|faks)[ /:.]+)+))++"

в примере 1, но после find () он возвращает: (символы были добавлены мной)

кажется, что я теряю один символ в каждой группе, и объединенные типы, такие как "TEL / faks", разделены.Мне также нужно захватить (если это существует, если нет, то по умолчанию номер телефона) для будущей обработки.

Как мне от этого избавиться?

пс.Я использую: без учета регистра

1 Ответ

1 голос
/ 22 июня 2010

Ваше регулярное выражение означает (примерно):

(?:                                 Match a group consisting of:
   .                                  any character
   (?!                                that is not followed by
      ((tel|fax|faks)[ /:.]+)+))      "tel" or "fax" or "fakx", followed by at least one
                                              punctuation character from [ /:.]
                                +   (multiple times)

Вот почему вы получаете пропущенный символ перед "Тел", "Факс" и т. Д. - потому что ваше регулярное выражение говорит, что никогда не соответствует символу до "Тел", "Факс" и т. Д.

Вот почему "Tel./.faks:" разделяется - потому что последний "." перед "факсом", поэтому он не сопоставляется.

Я бы предложил создать два соответствующих регулярных выражения:

A - a telephone number (parens, digits, commas, spaces), with at least one digit
B - a telephone/fax designation ("fax", "faks", "tel", punctuation)

Затем ищите строки, соответствующие

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