gpt4 book ai didi

python - re.sub 和 re.findall 之间的区别

转载 作者:行者123 更新时间:2023-11-30 23:20:42 27 4
gpt4 key购买 nike

我的字符串看起来像“Billboard Bill SpA”。我想要一个删除 SpA 的正则表达式,但前提是它前面有一个大写单词。我使用的正则表达式是“[A-Z][a-z]*\s(SpA)”。如果我使用 re.sub,SpA 和大写单词都会被删除,这是预期的。

re.sub("[A-Z][a-z]*\s(SpA)", "", "Billboard Bill SpA")
'Billboard '

但是,如果我使用 re.findall 我会得到我需要的功能:

re.findall("[A-Z][a-z]*\s(SpA)", "Billboard Bill SpA")
['SpA']

我知道我可以用“?<=”编写一个前置表达式,它不会消耗前置文本,但这只适用于固定长度的表达式。有人知道我能做些什么来只用 re.sub 删除“SpA”,或者让它像 re.findall 一样工作吗?

说得更清楚我想要一个正则表达式来删除 Spa,但前提是前面有一个大写单词:

re.sub(regular_expresssion, "", "Billboard Bill SpA") -> Billboard Bill
re.sub(regular_expresssion, "", "to SpA") -> to SpA

最佳答案

您的 re.sub 正在替换整个匹配项,而不仅仅是组 (SpA)。这就是为什么它也删除了 Bill。另一方面,findall 为您提供了该组。

re.sub 中,您可以指定包含不想删除的匹配部分。

re.sub("([A-Z][a-z]*\s)SpA", "\\1", "Billboard Bill SpA")
'Billboard Bill '

如果您还想删除空格,请将 \s 移到括号之外。

关于python - re.sub 和 re.findall 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303029/

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