2011-09-14 39 views
2

在後續我剛纔的問題 Hundreds of RegEx on one string 我結束了正則表達式像下面數百名正則表達式的一個字符串

(section1:|section2:|section3:|section[s]?4:|(special section:|it has:|synonyms:)).*?(?=section1:|section2:|section3:|section[s]?4:|(special section:|it has:|synonyms:)|$) 

section section in regex search

,我在我的督促系統的正則表達式有更多的再1000個字符,並且是多行。它所做的只是從大塊文本中分塊,然後再對這些塊進行單獨處理以提取信息。此外,我希望這些節標題是自然語言寬容,這就是爲什麼某些部分可以多種方式鍵入,導致正則表達式的大小增加。在性能和可管理性方面是否有更好的方法?

回答

1
  1. 對於性能在這樣的正則表達式處理,您可以使用前綴優化https://code.google.com/p/graph-expression/wiki/RegexpOptimization

  2. 該框架允許你寫與Java DSL typechecked正則表達式。所以它變得可重構和可維護。 https://code.google.com/p/graph-expression/

+0

給出的選項是非常好的,但我仍然有點困惑,我怎麼能使用它。我上面發佈的正則表達式不僅選擇節標題,而且還選擇它們的內容。我如何使用GExp來實現? – Sap

+0

@Grrrr哦...我想我可以使用生成的正則表達式兩次來做到這一點。 – Sap

+0

好的)正則表達式工具只允許你從字符串(或其他正則表達式)列表創建正則表達式。所以你可以將它傳遞給PAttern.compile,然後從匹配器中提取內容。有選項不要生成caputerd組,因此您可以將它與其他正則表達式組合使用,並通過Matcher.group(number)獲取字段。 GExp是高級別的正則表達式,首先你要編寫詞法分析器來創建令牌,然後對其進行正則表達式處理,相關的工具是GATE JAPE – yura

4

使用詞法分析器而不是正則表達式。

1

也許嘗試一個解析器生成器,如What's better, ANTLR or JavaCC?中討論的解析器生成器之一?

如果你有自然語言語法,那麼你通常會有重複的子語法來允許重新排序。一個適當的語法比正則表達式要容易得多。

+1

我看着ANTLR,在我看來,如果文本更具結構化格式,這是好事。另一方面,我正在研究自然語言,它往往是非結構化的。往往人們忘記打斷陳述或可能有更多的方式來表達同樣的東西 – Sap

相關問題