【问题标题】:Extracting Tokens out of a String using REGEX in Java在 Java 中使用 REGEX 从字符串中提取标记
【发布时间】:2014-08-22 03:47:24
【问题描述】:

我有一个这样的 HTML 字符串(德语):

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

它由三部分组成:

  • 人名(“Peter Goldberg 博士”)
  • 此人的地址(“Brünner Straße 19, A-1210”)
  • 以及此人的电话号码或字符串的其余部分(“Tel +43-1-1234567 (N)”)

我需要将整个字符串拆分为这 3 个组件,不带 HTML 列表标签 &lt;li&gt;&lt;/li&gt;

我正在尝试使用 Pattern 和 Matcher 类,但我肯定做错了什么。

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

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

有人可以帮忙吗?

非常感谢!!

【问题讨论】:

  • 答案将告诉您如何从特定字符串中获取这些特定字段,但那又如何?大多数正则表达式都用于其他输入字符串,仅举一个例子就会留下很多问题没有答案。地址中间总是只有一个逗号吗?或者它可以有0个或2个或更多?电话号码总是以Tel 开头吗?此人的姓名或电话号码中可以包含逗号吗?根据这些问题的答案,发布的答案可能不正确。

标签: java regex


【解决方案1】:

你可以使用这个正则表达式:

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

Working demo

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)`

【讨论】:

  • 谢谢 Rod_Algonquin 和 Fede!
  • 还有一点我还要提一下:在第二个组成部分(地址)中可以有任意数量的逗号(,)。我不确定这是否会改变您的答案!
  • @user3704589 我知道这就是我使用贪婪运算符的原因。使用这个,贪婪的运营商将忽略所有的命令,除了最新的,它是地址和电话之间的分隔符。
  • 华丽!非常感谢!!
【解决方案2】:

您可以使用这个正则表达式来获取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)

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 2020-06-10
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2014-06-24
    • 2013-03-10
    相关资源
    最近更新 更多