我在项目中有一个实例,我需要在描述或标题中匹配一些文本;
匹配要求如下;
a)出现任何"卷" OR" Part" (Case Insensitive);
b)任何" vol"或" pt" (CI)在[之后]和[期间]之前没有[[逗号] [空格];
我在regex101上尝试了许多不同的正则表达式模式(从4开始倒计时):http://regex101.com/r/lO9vO9/4
在那个链接中,有几行失败,我希望,理想情况下匹配。
. pt.
因为它包含带有尾随句点的pt,但在预期逗号时有错误的字符(句点)
The Red Pill, Pt 2
因为它包含前面的逗号和PT,但是错过了PT之后的句号。
如果有人可以帮助我,我会很感激,如果它的工作原理也可用 - 所以我可以弄清楚我哪里出错了。
答案 0 :(得分:2)
您可以使用此正则表达式:
(,\s(?:vol|pt)\.(*SKIP)(*F)|\b(?:volume|pt|vol|part)\b)
此部分,\s(?:vol|pt)\.
只匹配您的否定模式,(*SKIP)(*F)
只是从最终匹配中跳过它。
答案 1 :(得分:1)
所以,换句话说,你想禁止,pt& vol后面没有一个点,而pt& vol之前没有逗号和空格:
volume|part|(?<!, )(?:vol|pt)|(?:vol|pt)(?!\.)
注意:您可以通过在开头处添加前瞻和单词边界来改进此模式(以这种方式,仅针对以p和v开头的单词测试交替)。您也可以查看&#34; vol&#34;或&#34; pt&#34;通过强迫没有字母跟随,这不是另一个词的开头。
(?=\b[pv])(?:volume|part|(?<!, )(?:vol|pt)|(?:vol|pt)(?!\.))(?![a-z])