【问题标题】:How to match an optional word between two other words?如何匹配两个其他单词之间的可选单词?
【发布时间】:2021-11-18 14:50:22
【问题描述】:

假设我想匹配单词"green apple"。我也想匹配像"green big apple"这样的词。

如何写正则表达式?

我写了r"green [a-z+] apple",但这不起作用。

【问题讨论】:

  • 只匹配一个字母,也许你想匹配零个或多个字母
  • 怎么做?
  • 第一个文本是第二个文本的子集。要使单个正则表达式匹配两者,可以连接两个字符串然后分解。 green[ ](?:big[ ])?apple

标签: python regex python-re


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    图案

    这应该可以正常工作。

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

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

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

    匹配示例

    以下是该模式将捕获的示例。

    青苹果

    绿色的大苹果

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-08
      • 2015-09-08
      • 1970-01-01
      • 2017-09-21
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多