这就是我试图避免匹配的问题(以粗体显示):
( 2 Kgs 24.18-20 ; Jer 52.1-3a)
但我想匹配第二部分(Jer 52.1-3a)
这是我的搜索:(?!\d )([A-Z]?\w{1,3} \d+(—|–\d+)?(\.\d+)?(—|–\d+)?(\d+)?(\.\d+)?)(\w)?
(此搜索有很多不同的变量)
它保持匹配Kgs 24.18-20我不是100%确定如何使用?!正确地为此
答案 0 :(得分:1)
答案 1 :(得分:0)
首先尝试用\ d \ s替换那些:
(\d\s)(\w{1,3}\s[^\s]+)
然后用:
替换其余部分(\w{1,3}\s[^\s]+)
这会有用吗?
答案 2 :(得分:0)
你能不能进入分号以避免你不想要的东西?和/或制作所需的尾随字母,以便图案不匹配不需要的部分?
/;\s+ # semi-colon and space
([A-Z][a-z]{1,3}\s+ # ref name and space
\d[\d.]*[a-z]? # number, optional point, optional letter
- # hyphen
\d[\d.]*[a-z]) # number, optional point, REQUIRED letter
/x;
或者
/; ([A-Z][a-z]{1,3} \d[\d.]*[a-z]?-\d[\d.]*[a-z])/
答案 3 :(得分:0)
我认为你遇到的问题是
(?<!\d )
是一个负面的展望。它表示您不想匹配的模式的初始字符Kg可能不是数字后跟空格。而且他们不是 - 他们是一个大写字母,后跟一个小写字母。
正如stribizhev的评论中所讨论的,背后的负面看法可能就是你想要的。换句话说,你想说从Kg开始是可以的,除了当你看到Kg之前的字符时你会发现有一个数字后跟一个空格。当我在regex101上测试以下内容时,它匹配以Jer开头的部分,但不匹配以Kgs开头的部分,我认为,它保留了正则表达式的原始意图。
(?<!\d )([A-Z]\w{1,3} \d+(—|–\d+)?(\.\d+)?(—|–\d+)?(\d+)?(\.\d+)?)(\w)?
答案 4 :(得分:0)