代码之家  ›  专栏  ›  技术社区  ›  Ragunath Jawahar cephus

如何使用regex从以下内容中提取数据?

  •  0
  • Ragunath Jawahar cephus  · 技术社区  · 15 年前

    我有以下模式的数据集

    1<a href="/contact/">Joe</a><br />joe.doe@somemail.com</div>
    2<a href="/contact/">Tom</a><br />tom.cat@aol.com</div>
    3<a href="/contact/">Jerry</a><br />jerry.mouse@yahoo.co.in</div>
    

    等等。。。

    我需要从中提取姓名和电子邮件ID。我该怎么做?


    更新:

    根据您的回答,我已将数据格式更改为:

    1(name)Joe(email)joe.doe@somemail.com(end)
    2(name)Tom(email)tom.cat@aol.com(end)
    3(name)Jerry(email)jerry.mouse@yahoo.co.in(end)
    

    如何解析 那个 ?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Chetan    15 年前

    使用此regex:

    \(name\)(.*)\(email\)(.*)\(end\)
    

    现在,第一个backreference \1 包含名称和第二个backreference \2 包含电子邮件地址。

    继续调用同一个regex以获取下一个名称和电子邮件地址。

        2
  •  1
  •   Community Mohan Dere    9 年前

    Don't use regular expressions to parse HTML 。

    使用HTML分析器。上面有一堆 this page . 根据我的经验使用 Tidy ,我建议 JTidy . 从他们的页面:

    JTIDY是一个HTMLTyy的Java端口,一个HTML语法检查器和漂亮的打印机。像它的非Java表兄弟一样,JTidy可以被用作一个 用于清除格式错误和错误HTML的工具 . 此外,jtidy为正在处理的文档提供了一个dom接口, 这有效地使您能够将JTIDY用作真实HTML的DOM解析器。

    更新

    根据问题的编辑,使用 split() 将字符串拆分为 \([a-z]+\) 作为分隔符。这将为您提供单独的组件:

    String[] components = str.split("\\([a-z]+\\)");
    

    或者可以使用更通用的表达式 \(.*?\) 。

        3
  •  1
  •   Zoe    15 年前

    如果您保证这将是所有条目的标准模式,则只需在每行上使用string.split(),使用正则表达式(.*?)作为分割模式。这将匹配 最小可能数 其他字符,后面跟着另一个)。所以代码看起来是这样的:

    //for each String line
    String[] items = line.split("\\(.*?\\)");
    name = items[0];
    email = items[1];