如何匹配两个其他单词之间的可选单词?

How to match an optional word between two other words?

假设我要匹配单词 "green apple"。我还想匹配 "green big apple".

这样的词

这个正则表达式怎么写?

我写了r"green [a-z+] apple",但这行不通。

你很接近,但你的 +[] 里面而不是外面,而且这个词可能不存在所以你需要把整个东西(和一个空格)包裹起来在 ? 中匹配一个词或不匹配词(可以用 * 替换任意数量的中间词)。

import re

pattern =  r"green ([a-z]+ )?apple"
print(re.match(pattern, "green apple").group(0))
print(re.match(pattern, "green big apple").group(0))

输出:

green apple
green big apple

模式

这应该没问题。

/(green)(.+)(apple)/

你的问题的答案并不简单,因为你需要决定你想如何处理不同的场景。例如:

  • 您想捕捉“绿色”和“苹果”之间的所有内容吗?
  • 捕获组是否相关,或者您只是想知道这两个词是否出现在“green”在“apple”之前的给定序列中?
  • 所说单词的顺序是否重要,它们是否必须成对出现,即每次出现“green”时是否必须有一个“apple”?

匹配示例

下面是该模式将捕获的内容的示例。

青苹果

绿色大苹果

香蕉绿色小蓝莓苹果橙色草莓