Python re.sub和re.findall之间的差异
我的琴弦看起来像“Billboard Bill SpA”。我想要一个正则表达式来删除SpA,但前提是前面有一个大写单词。我使用的正则表达式是“[A-Z][A-Z]*\s(SpA)”。如果我在删除SpA和大写单词之前使用re.sub,这是意料之中的Python re.sub和re.findall之间的差异,python,regex,Python,Regex,我的琴弦看起来像“Billboard Bill SpA”。我想要一个正则表达式来删除SpA,但前提是前面有一个大写单词。我使用的正则表达式是“[A-Z][A-Z]*\s(SpA)”。如果我在删除SpA和大写单词之前使用re.sub,这是意料之中的 re.sub("[A-Z][a-z]*\s(SpA)", "", "Billboard Bill SpA") 'Billboard ' 但是,如果我使用re.findall,我将获得所需的功能: re.findall("[A-Z][a-z]*\s(S
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("([A-Z][a-z]*\s)(SpA)", "\\1", "Billboard Bill SpA")
'Billboard Bill '
您的
re.sub
正在替换整个匹配项,而不仅仅是组(SpA)
。这就是为什么它还删除了账单findall
,另一方面,它给了您组
在re.sub
中,可以指定包含不希望删除的匹配部分
re.sub("([A-Z][a-z]*\s)SpA", "\\1", "Billboard Bill SpA")
'Billboard Bill '
如果你也想删除空格,请将\s
移到括号外。我不确定你的问题到底是什么!你能用简单的英语解释一下吗(使用像这样的单词是输入,这是期望的输出)?我在问题的文本中添加了更多信息,使问题更清楚
re.sub("([A-Z][a-z]*\s)SpA", "\\1", "Billboard Bill SpA")
'Billboard Bill '