gpt4 book ai didi

python - 不在 python 中返回正则表达式中的整个模式

转载 作者:行者123 更新时间:2023-11-28 20:26:08 25 4
gpt4 key购买 nike

我有以下代码:

haystack = "aaa months(3) bbb"
needle = re.compile(r'(months|days)\([\d]*\)')
instances = list(set(needle.findall(haystack)))
print str(instances)

我希望它打印 months(3) 但我只得到 months。这有什么原因吗?

最佳答案

needle = re.compile(r'((?:months|days)\([\d]*\))')

解决了你的问题。

您只捕获了月|日部分。

在这种特定情况下,这个正则表达式要好一些:

needle = re.compile(r'((?:months|days)\(\d+\))')

这样你只会得到一个数字的结果,以前像 months() 这样的结果会起作用。如果您想忽略月或日等选项的大小写,则还要添加 re.IGNORECASE 标志。像这样:

re.compile(r'((?:months|days)\(\d+\))', re.IGNORECASE)

对 OP 的一些解释:

正则表达式由许多元素组成,其中最主要的是捕获组。 "()"但有时我们想做分组而不捕获,所以我们使用 "(?:)"还有很多其他形式的分组,但这些是最常见。

在这种情况下,我们将整个正则表达式包围在一个捕获组中,因为您试图捕获所有内容,通常 - 任何正则表达式都会自动被一个捕获组包围,但在这种情况下,您明确指定了一个,所以它没有用自动捕获组包围您的正则表达式。

现在我们已经用一个捕获组包围了整个正则表达式,我们通过在开头添加 ?: 将我们拥有的组变成一​​个非捕获组,如上所示。我们也不能包围整个正则表达式,只将该组变成一个非捕获组,因为如您所见,它会自动将整个正则表达式变成一个不存在的捕获组。我个人更喜欢显式编码。

有关正则表达式的更多信息可在此处找到:http://docs.python.org/library/re.html

关于python - 不在 python 中返回正则表达式中的整个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12495890/

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