2010-12-05 44 views
0

我是一个开始尝试解析处理草图中的HTML文件的程序员。 (顺便说一下,如果你不知道Processing,它会编译成Java并使用相同的正则表达式函数)。我已经使用SimpleML将HTML文件正确地捕获为单个字符串。我试图捕捉数据来自表,就像这样:在处理草图中使用正则表达式的帮助?

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

的处理文档说:

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

所以现在我一直想组和量词的各种组合,如:

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

但必须有一些概念作品我没有得到,因为没有什么工作。似乎这应该很容易,对吧?

+0

支具抗正则表达式和HTML的人群 – 2010-12-05 15:27:18

回答

1

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

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

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

<th>.*?</th> 

可能会工作。

一点更稳定,更快速微创:告诉正是它允许匹配,例如发动机:

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

[^<>]指“除尖括号的任何字符”。

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

+0

好了,所以我越来越从正则表达式+ HTML =麻烦的社区感。那么更好的方法是什么? – James 2010-12-05 21:20:43

1

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

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

+0

这似乎是詹姆斯遇到的更突出的问题。 – 2010-12-05 17:12:14