2017-05-19 21 views
1

我試圖匹配一些法律文檔鏈接。我已經吃飽了,但我想我錯過了一些東西。這是我的工作,現在:Java正則表達式以任何形式組合模式

(\d()?)?(([[a-zA-Z]\.])+?) ([0-9]+?)\b:([0-9]+?)?\b 

我有一個基地建設女巫我可以匹配:

? =可選

number/space?/string/space/number/:/number 

但現在我想有選擇地匹配休耕的任意組合:

-/number 
,/space/number 
,/space/number/-/number 

這是我最好的比賽:

(\d()?)?(([[a-zA-Z]\.])+?) ([0-9]+?)\b:([0-9]+?)(, [0-9]+?)?(-[0-9]+?)?(, ([0-9]+?)-([0-9]+?)?)?\b 

我可以匹配這一點:

8 Law 84:145, 252-320 

但不是這樣:

8 Law 84:145, 252-320, 458, 517-665 
+2

目前尚不清楚你最終需要做些什麼。你打算獲得哪些捕獲組?第一個數字是否真的可選?它不符合。到你的公式。看看[我想出的正則表達式](https://regex101.com/r/QzPDVa/2)。 –

+0

這是Java的正則表達式? –

+0

是的,只是在使用Java字符串定義模式時,反斜槓必須加倍。 –

回答

1

你可以使用

(\d+)\s*([a-zA-Z]+)\s+(\d+):(\d+)((?:-\d+|,\s\d+(?:-\d+)?)*) 

參見regex demo

我添加的主要部分是((?:-\d+|,\s\d+(?:-\d+)?)*)匹配並捕獲到的一組0或更多序列:

  • -\d+ - 連字符和1+數字
  • | - 或
  • ,\s\d+(?:-\d+)? - 逗號,空格,1+數字,然後是可選序列-和1+數字。

不要忘記在代碼中的Java字符串文字中加上反斜槓。

+1

再次感謝您的幫助! –