gpt4 book ai didi

Python 正则表达式 : XOR operator

转载 作者:太空狗 更新时间:2023-10-30 02:57:12 25 4
gpt4 key购买 nike

假设我有这样的字符串:

  1. “DT NN IN NN”
  2. “DT RB JJ NN”
  3. “DT JJ JJ NN”
  4. “DT RB RB NN NN”
  5. “DT RB RB”

所以,我有一个字符串列表:

list = ["DT NN IN NN", "DT RB JJ NN", "DT JJ JJ NN", "DT RB RB NN NN", "DT RB RB"]

我有以下代码:

pattern = "(?:DT\s+)+([?:RB\s+|?:JJ\s+])+(?:NN\s+)*NN$"
for item in list:
m = re.match(pattern, item)
if m:
print item

我想从 pattern 中得到的是匹配以 DT 开头的字符串(出现一次或多次)具有 RBJJ(出现一次或多次),但不是同时出现,然后以 NN 结束(再次出现一次或多次)。

因此,在最终结果中,我应该在屏幕上打印 3 和 4。但是,使用我的正则表达式,我还得到了 2,这是我不想要的。我如何更改 pattern 才能工作?如何用 XOR 替换管道 (OR)?

最佳答案

问题在于您如何定义 RB 的存在和 JJ .您没有提到只有其中一个应该在场。这可以通过用 | 分隔它们来实现。 (管道)并让它们中的任何一个重复一次或多次(+)。尝试将您的模式更改为:

pattern = "(?:DT\s+)+(?:(RB\s+)+|(JJ\s+)+)(?:NN\s+)*NN$"

此外,(?:<something>)称为非捕获组。你用它来表示“我希望 <something> 被匹配,但当我稍后选择组时不包括在内。从它的外观来看,你没有使用任何组。你只是打印整个 item(除非你为简洁起见屏蔽了代码)。如果您实际上不需要组,这里有一个适合您的简单版本:

pattern = "(DT\s+)+((RB\s+)+|(JJ\s+)+)(NN\s*)*NN$"

我还让结尾的一组空白出现 0 次或多次,而不是像原始模式那样出现一次或多次。请随意更改它。

关于Python 正则表达式 : XOR operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37898679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com