我有以下格式的几个字符串:
[1985..1989]
[Start..End]
[ 1985 .. 1989 ]
[ Start .. End ]
[ 1985.13579 .. 1989.2468 ]
[ Start.from .. End.at ]
我需要捕捉括号和2个点之间的两个部分,以及摆脱空格/换行符(例如1985
& 1989
)。这是我到目前为止的正则表达式:
^\[\s*([\s\S]+?)\s*\.\.\s*([\s\S]+?)\s*\]$
(现场测试员:http://regex101.com/r/tO8gG6)
现在这个正则表达式的问题是,如果我有一个看起来像[2...5]
的字符串,第二个捕获组将得到.5
这不是我想要的(你可以使用测试器检查这个)以上)。在这种情况下,我希望匹配完全失败,我不确定如何修改上面的正则表达式来做到这一点。
答案 0 :(得分:1)
请尝试以下操作,我将 \。\。修改为 \。+ 表示捕获所有一个或多个点
^\[\s*([\s\S]+?)\s*\.+\s*([\s\S]+?)\s*\]$
我修改了你的正则表达式http://regex101.com/r/wE6aY0
答案 1 :(得分:1)
尝试否定课程:
^\[\s*([^.]+?)\s*\.\.\s*([^.]+?)\s*\]$
修改强>
根据你的编辑,因为你也可以有句号,你可以使用它:
^\[\s*([^.]+?(?:\.[^.]+?)*?)\s*\.\.\s*([^.]+?(?:\.[^.]+?)*?)\s*\]$
答案 2 :(得分:0)
再次编辑!!
试试新链接:
RE RE REVISED EXPRESS:
\[ ?(\d*|\w*)\.?(\d*|\w*) ?.. ?(\d*|\w*)\.?(\d*|\w*) ?\]
现在,它符合您提到的所有模式。
答案 3 :(得分:0)