Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从regex子模式中排除单词?_Regex_Delphi - Fatal编程技术网

如何从regex子模式中排除单词?

如何从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

我正在使用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})\b';
结果中错误包含的关键词是“不”;但应排除:

示例文本:

。。。你不应该吃每一个

类似这样的动词应包含在结果中: 示例文本:

以免他伸出手来

现在我要用ß符号解释这个部分。ß符号表示,原文中有“not”一词,随后是动词。但我在之前的互动或会话中更改了此文本,因此我现在正在处理的源文本如上所述。模式
([^223\W]\W{2,15})
应避免使用否定意义的单词。这也是为什么不包括“否定”动词的原因

所以问题的关键是如何从捕获的文本中排除“not”这个词;这是由这个模式捕获的,它是
([^223\W]\W{2,15})
(\W{3,15})

我正在使用此模式替换文本中的子字符串

需要更多的示例文本吗

我无法忍受。及

所以我可能把她带走了

他们可能住在一起

他们不能住在一起

以免你说

在第3组中,我希望匹配: 对于
bear
take
(或posly
have
代替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
    -单词边界
  • (我|你|他|她|它|我们|他们|这个|那个|)
    -第一组的代词之一
  • \s+
    -1+空格(它已经在相邻组的两侧充当单词边界)
  • (can | should | will | can | must | wand to | had to | may)
    -情态动词之一
  • \s+
    -1+空格
  • \K
    -匹配重置运算符
  • (?|(?=not\b)([^223;\W]\W{2,15})\b)
    -与以下任一项匹配的分支重置组
    • (?=not\b)(
      -如果右侧有
      not
      作为整个单词,则将空字符串捕获到组3中
    • |
      -或(此处,其他)
    • ([^ß\W]\W{2,15})\b
      -匹配并捕获第3组中除
      ß
      以外的任何单词字符,然后捕获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
动词之前发生在
之后。它说这个动词的用法是“否定的”。没有这样的事情。单词之间只有一个空格的简单文本。这就是我使用空格的原因。