Извлечение Строки формы данных, используя Java / регулярное выражение - PullRequest
1 голос
/ 15 марта 2011

Я пытаюсь извлечь данные из этой строки:

Здравствуйте.Blah Blahblah Blah Building 016814 - Дверь 01002 BlahBLAHblah DUHHH 78787 Blah, Blah Blah Building Dr 4647 8989 BLAHBlah Blah BlahBlah

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

Вот мой код:

public static void main(String agrs[]) {
    String myStr = "Hello there. Blah blahblah blah Building 016814 - Door 01002"+
           " BlahBLAHblah DUHHH 78787 blah, Blah blah Building Dr 4647 8989 BLAHBlah blah blahBlah";

    Pattern p = Pattern.compile("Building.+?(?:[Dd]).+?(\\d+).+?(\\d+)");
    Pattern p1 = Pattern.compile("Building.+?(\\d+).+?(?:[Dd]).+?(\\d+)");

    Matcher m = p.matcher(myStr);
    Matcher m1 = p1.matcher(myStr);

    while(m1.find() && m.find()) {
         System.out.print(" Building " + m1.group(1) + " " + "Door ");
         System.out.print(m1.group(2));
         System.out.print(" Building " + m.group(1)+" "+ "Door "+m.group(2));
    }

А вот мой вывод:

Building 016814 Door 01002 Building 01002 Door 78787

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

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Полагаю, я понял ответ на свой вопрос. Большое спасибо всем за ваш вклад; очень признателен.

Я использовал:

Building[ ][Dd].+?(\\d+).+?(\\d+)

и мой вывод был:

Здание 016814 Дверь 01002 Здание 4647 Дверь 8989

0 голосов
/ 15 марта 2011

Ваши (.+?) детали слишком широкие.Попробуйте это:

"\\b((?:Building|Door|Dr)\\s\\d+)\\b"

Затем просто возьмите то, что находится в перехватах из группы 1. Убедитесь, что вы отключаете сопоставление с учетом регистра, если вы этого не хотите.

Я предполагаюна результаты, которые вы хотите здесь.На самом деле вы можете искать это вместо этого:

"\\b(Building\\s\\d+)\\s(Door\\s\\d+)\\b"

Редактировать: Исходя из ваших комментариев, простейший способ, который я могу придумать, это:

"\\bBuilding\\s(?:(\\d+)\\sDoor\\s(\\d+)|Dr\\s(\\d+)\\s(\\d+))\\b"

Удаление двойных обратных косых черт для ясности:

/\bBuilding\s(?:(\d+)\sDoor\s(\d+)|Dr\s(\d+)\s(\d+))\b/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...