我正在尝试匹配一些法律文档链接。我已经走了足够多的路,但我想我错过了一些东西。这是我现在的工作:
(\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
最佳答案
您可以使用
(\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 字符串文字中使用双反斜杠。
关于Java RegEx 以任何形式组合模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44077439/