2010-12-05 42 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