2014-08-20 3 views
0

У меня есть строка HTML (на немецком языке), как это:извлекая токены из строки с помощью Regex в Java

<li>Peter Goldberg Dr. , Brünner Straße 19, A-1210, Tel +43-1-1234567 (N)</li> 

Он состоит из 3-х частей:

  • имя лица (» Peter Goldberg Dr. ")
  • адрес лица (« Brünner Straße 19, A-1210 »)
  • и номер телефона человека или просто остальная часть строки (« Тел + 43-1- 1234567 (N) ")

Мне нужно разделить целую строку на эти 3 компонента без тэгов HTML-тегов <li> и </li>.

Я пробовал это с помощью классов Pattern и Matcher, но я делаю что-то неправильно.

Pattern myPattern = Pattern.compile("<li>.+,.+Tel.+</li>"); 
    Matcher mat = myPattern.matcher(eingabe[0]); 

    while (mat.find()) { 
     System.out.println(mat.group(0)); 
    } 

Помогло ли кто-нибудь помочь?

Большое спасибо!

+2

ответы покажут вам, как получить эти конкретные поля из этой конкретной строки, но что? Большинство регулярных выражений предназначены для использования на других входных строках, и только один пример оставляет много вопросов без ответа. Будет ли адрес всегда иметь ровно одну запятую посередине? Или может быть 0 или 2 или более? Всегда ли номер телефона начинается с «Тел»? Может ли имя человека или номер телефона содержать в нем запятую? В зависимости от ответов на эти вопросы, опубликованные ответы могут быть неверными. – ajb

ответ

1

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

<li>(.*?), (.*), (.*)<\/li> 

Working demo

enter image description here

MATCH 1 
1. [4-23] `Peter Goldberg Dr. ` 
2. [25-50] `Brünner Straße 19, A-1210` 
3. [52-78] `Tel +43-1-1234567 (N)` 
+0

Спасибо Род Алгконкин и Фед! – user3704589

+0

Есть что-то, что я еще должен упомянуть: во втором компоненте (адресе) может быть любое количество запятых (,). Я не уверен, что это ничего не изменит в ваших ответах! – user3704589

+0

@ user3704589 Я знаю, поэтому я использовал жадного оператора. Используя это, жадный оператор будет игнорировать все запятые, кроме последнего, который является разделителем между адресом и телефоном. –

1

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

String s = "<li>Peter Goldberg Dr. , Brünner Straße 19, A-1210, Tel +43-1-1234567 (N)</li>"; 
    Pattern myPattern = Pattern.compile("<li>(.*)</li>"); 
    Matcher mat = myPattern.matcher(s); 
    String [] array; 
    while (mat.find()) { 
     array = mat.group(1).split(","); 
     System.out.println("Name: " + array[0]); 
     System.out.println("Address: " + array[1] + "," + array[2]); 
     System.out.println("Telephone: " + array[3]); 

    } 

результат:

Name: Peter Goldberg Dr. 
Address: Brünner Straße 19, A-1210 
Telephone: Tel +43-1-1234567 (N) 
Смежные вопросы