在处理草图中帮助正则表达式?

时间:2010-12-05 15:21:37

标签: regex processing

我是一名初级程序员,试图在Processing sketch中解析HTML文件。 (顺便说一句,如果您不知道Processing,它将编译为Java并使用相同的正则表达式函数)。我使用SimpleML正确地将HTML文件捕获为单个String。我试图捕获的数据来自一个表,如下所示:

<th>Name</th>
    <th>John F. Kennedy</th>
    <th>Lyndon Johnson</th>
    <th>Richard Nixon</th>

我想将候选人的名字解析成一个数组(删除“名字”)。

所以我第一次尝试

    candidates = match(rawString,"<th>.*</th>");

返回了整个列表。

然后我试了

    candidates = match(rawString,"<th>.{1,50}</th>");

仅返回

<th>Name</th>

处理文档说:

  

如果regexp中有组(由括号组指定),则每个组的内容将在数组中返回。正则表达式匹配的元素[0]返回整个匹配字符串,匹配组从元素[1]开始(第一组为[1],第二组为[2],依此类推)。

所以现在我一直在尝试各种组和量词组合,例如:

    candidates = match(rawString,"(<th>.{1,50}</th>)*");

但是必须有一些我没有得到的概念性作品,因为没有任何效果。看起来这应该很容易,对吧?

2 个答案:

答案 0 :(得分:1)

使用正则表达式解析HTML通常不是一个好主意,但你可能会在这里得到它。

你的问题似乎是.*贪婪地匹配,我。即尽可能多的字符,从而匹配字符串中从第一个<th>到最后</th>的所有内容。

让它变得懒惰,我即告诉量词尽可能少匹配是一个解决方案:

<th>.*?</th>

可能会奏效。

更稳定,速度更快:告诉引擎确切的匹配内容,例如:

<th>[^<>]*</th>

[^<>]表示“除了尖括号之外的任何字符”。

如果您尝试将嵌套结构与正则表达式匹配,则会遇到问题。它可以用现代的正则表达式来完成,但是做起来很难。添加HTML注释和字符串(可能包含您正在匹配的分隔符),并且您正处于一个受伤的世界。

答案 1 :(得分:1)

如果您希望多次匹配表达式,则可能需要matchAll方法。 match只希望您的模式匹配一​​次,因此只返回第一个找到的结果。

http://www.processing.org/reference/matchAll_.html