gpt4 book ai didi

python - 非贪婪组之后的可选组

转载 作者:行者123 更新时间:2023-11-30 23:34:08 25 4
gpt4 key购买 nike

我对正则表达式并不是完全陌生,我在很多场合都使用过它们,但大多数情况下都没有像前瞻等“花哨”的东西。我需要一个可以匹配以下两种模式的正则表达式:

  1. PrefTextValue13
  2. 前缀文本

字符串“Pref”始终存在,但我想忽略它。 'Text' 是我需要的一个组,它与 [\w\d_]+ 匹配。字符串“Value”,当存在时应该被忽略,但是当存在时,它后面必须跟着一个我需要作为一个组捕获的数字(\d+)。 “值”和数字都是可选的。

示例:对于情况 1)我需要将“文本”匹配为组 1,将 13 匹配为组 2; 2)我不想只匹配文本。我的尝试(众多尝试之一)是:

re.compile("Pref([\w\d_]+)(Value)?(\d+)?") or 
re.compile("Pref([\w\d_]+?)(?:Value)?(?:?=Value)(\d+)?")

但我无法正确理解。

最佳答案

尝试使用这个正则表达式:

re.compile(r'^Pref(\w+?)(?:Value(\d+))?$')

请注意,[\w\d_]\w 相同。

您必须将 Value\d+ 集体设置为可选。为此你必须让他们成为一个团体。但由于您不想捕获它们,因此可以使用非捕获组。另外,您可以将其中的 \d+ 部分设置为捕获组,以便您可以获取该部分。

"Pref(\w+)(?:Value(\d+))?" 的问题在于,\w+ 将匹配所有内容直到最后,并且满足正则表达式,因为 Value\d+ 部分是可选的。因此,所有内容都将被捕获在 \w+ 中。所以,你必须让它不情愿 - \w+?.

现在,您所需的输出位于组 1组 2 中。对于第二种nd情况,组 2 将为 null

关于python - 非贪婪组之后的可选组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18375396/

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