Java регулярное выражение для извлечения данных между тегами - PullRequest
3 голосов
/ 15 сентября 2010

Я пытаюсь использовать регулярное выражение, которое извлекает данные из строки типа

<B Att="text">Test</B><C>Test1</C>

Извлеченные выходные данные должны быть Test и Test1.Это то, что я делал до сих пор:

public class HelloWorld {
    public static void main(String[] args)
    {
        String s = "<B>Test</B>";
        String reg = "<.*?>(.*)<\\/.*?>";
        Pattern p = Pattern.compile(reg);
        Matcher m = p.matcher(s);
        while(m.find())
        {
            String s1 = m.group();
            System.out.println(s1);
        }
    }
}

Но это дает результат <B>Test</B>.Кто-нибудь может указать, что я делаю неправильно?

Ответы [ 4 ]

7 голосов
/ 15 сентября 2010

Три проблемы:

  • Ваша тестовая строка неверна.
  • Вам нужен не жадный модификатор в группе.
  • Вам необходимо указать, какую группу вы хотите (группа 1).

Попробуйте это:

String s = "<B Att=\"text\">Test</B><C>Test1</C>"; // <-- Fix 1
String reg = "<.*?>(.*?)</.*?>";                   // <-- Fix 2
// ...
String s1 = m.group(1);                            // <-- Fix 3

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

Посмотрите, как он работает на ideone .

(Кроме того, не используйте регулярные выражения для анализа HTML - используйте анализатор HTML.)

2 голосов
/ 15 сентября 2010

Если вы используете eclipse, есть хороший плагин, который поможет вам проверить ваше регулярное выражение без написания какого-либо класса для его проверки. Вот ссылка: http://regex -util.sourceforge.net / обновление / Вам нужно будет показать представление, выбрав Window -> Show View -> Other, а затем Regex Util

Надеюсь, это поможет вам бороться с регулярными выражениями

1 голос
/ 15 сентября 2010

Я думаю, что лучший способ обработать и получить значение XML узлов - это просто рассматривать его как XML.

Если вы действительно хотите придерживаться regex, попробуйте:

<B[^>]*>(.+?)</B\s*>

понимая, что вы всегда получите значение тега B.

Или, если вам нужно значение любого тега, вы будете использовать что-то вроде:

<.*?>(.*?)</.*?>
1 голос
/ 15 сентября 2010

Похоже, вы пытаетесь использовать регулярные выражения в XML и / или HTML. Я бы посоветовал не использовать регулярные выражения и вместо этого создавать парсер или лексер для обработки этого типа организации.

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