如何从regex子模式中排除单词?
我正在使用Delphi7和TDiperLegex。我正在寻找句子中包含特定部分的动词来识别动词如何从regex子模式中排除单词?,regex,delphi,Regex,Delphi,我正在使用Delphi7和TDiperLegex。我正在寻找句子中包含特定部分的动词来识别动词 s1 := '(I|you|he|she|it|we|they|this|that|these|those)'; s2 := (can|should|would|could|must|want to|have to|had to|might); RegEx_Seek_1.MatchPattern := '(*UCP)(?m) \b'+s1+'\b \b'+s2+'\b \K([^ß\W]\w{2,15
s1 := '(I|you|he|she|it|we|they|this|that|these|those)';
s2 := (can|should|would|could|must|want to|have to|had to|might);
RegEx_Seek_1.MatchPattern := '(*UCP)(?m) \b'+s1+'\b \b'+s2+'\b \K([^ß\W]\w{2,15})\b';
结果中错误包含的关键词是“不”;但应排除:
示例文本:
。。。你不应该吃每一个
类似这样的动词应包含在结果中:
示例文本:
以免他伸出手来
现在我要用ß符号解释这个部分。ß符号表示,原文中有“not”一词,随后是动词。但我在之前的互动或会话中更改了此文本,因此我现在正在处理的源文本如上所述。模式([^223\W]\W{2,15})
应避免使用否定意义的单词。这也是为什么不包括“否定”动词的原因
所以问题的关键是如何从捕获的文本中排除“not”这个词;这是由这个模式捕获的,它是([^223\W]\W{2,15})
或(\W{3,15})
我正在使用此模式替换文本中的子字符串
需要更多的示例文本吗
我无法忍受。及
所以我可能把她带走了
他们可能住在一起
他们不能住在一起
以免你说
在第3组中,我希望匹配:
对于bear
,take
(或poslyhave
代替take),停留
和说
。
我试图排除not
单词,因此not
后面的任何动词或单词必须完全排除在第三组或匹配项之外。我只对第三组感兴趣。第1组和第2组只指定动词前面的替代项。如果情态动词后面有not
作为一个整词,或者是一个概念动词,则可以使用a来匹配空字符串:
s1 := '(I|you|he|she|it|we|they|this|that|these|those)';
s2 := (can|should|would|could|must|want to|have to|had to|might);
RegEx_Seek_1.MatchPattern := '(*UCP)(?m) \b'+s1+'\b \b'+s2+'\b \K([^ß\W]\w{2,15})\b';
\b(I|you|he|she|it|we|they|this|that|these|those)\s+(can|should|would|could|must|want to|have to|had to|might)\s+\K(?|(?=not\b)()|([^ß\W]\w{2,15})\b)
见
详细信息
-单词边界\b
-第一组的代词之一(我|你|他|她|它|我们|他们|这个|那个|)
-1+空格(它已经在相邻组的两侧充当单词边界)\s+
-情态动词之一(can | should | will | can | must | wand to | had to | may)
-1+空格\s+
-匹配重置运算符\K
-与以下任一项匹配的分支重置组(?|(?=not\b)([^223;\W]\W{2,15})\b)
-如果右侧有(?=not\b)(
作为整个单词,则将空字符串捕获到组3中not
-或(此处,其他)|
-匹配并捕获第3组中除([^ß\W]\W{2,15})\b
以外的任何单词字符,然后捕获2到15个单词字符,并跟随单词边界ß
请注意,
(?m)
-PCRE\u MULTILINE
-仅当您希望字符类之外的^
和$
匹配行的开始和结束而不是整个字符串时才有必要。因为你的模式没有这样的锚,(?m)
是多余的。这里没有足够的信息:1)如果你有,它们不能住在一起
,应该有任何匹配吗?2) 如果是,第3组是否应为“ß驻留”?3) 是否应该有一个匹配的他们不能住在一起
?如果是,组中应该有哪些单词?@Wiktor Stribiżew:我添加了信息:在第3组中,我希望匹配:对于熊,采取(或者可能有而不是采取),停留和说。。。我试图把“不”排除在小组之外。也就是说,ßdwell
在任何情况下都不得匹配。因为它被not
字否定。所以,'(*UCP)\b'+s1+'\s+'+s2+'\s+\K(?!not\b)([^223\W]\W{2,15})\b'
不是你要找的,对吗?(注意在这个正则表达式中你不需要(?m)
)试试(*UCP)\b'+s1+'\s+'+s2+'\s+\K(?)?!可能有很大的区别:I
和can
在I canßtake那
将不匹配,因为不存在这个文本:I canßtake
动词之前发生在之后。它说这个动词的用法是“否定的”。没有这样的事情。单词之间只有一个空格的简单文本。这就是我使用空格的原因。