您需要将匹配替换为字符串中正则表达式中的组。顺其自然foo42buz,你需要得到foobarbuz
它显然,我立即尝试写这样的东西
string = 'foo42buz'
pattern = re.compile(r'(\d+)buz')
re.sub(pattern,'bar',string)
但它返回相同foo42buz
我用谷歌搜索如何用组替换匹配项并尝试这样做
string = 'foo42buz'
pattern = re.compile(r'(\d+)buz')
re.sub(pattern,r'\1bar',string)
所以
string = 'foo42buz'
pattern = re.compile(r'(\d+)buz')
re.sub(pattern,r'\g<1>bar',string)
即便如此
string = 'foo42buz'
pattern = re.compile(r'(?P<name>\d+)buz')
re.sub(pattern,r'\g<name>bar',string)
但是 re.sub 对我来说以一种非常不明显的方式表现,返回foo42buz
我会再试一次。有一个字符串,有一个带组的正则表达式。需要将字符串中与组匹配的子串替换为另一个子串。有一个字符串foo42buz,有一个正则表达式 (\d+)buz,其中组(\d+)匹配子字符串42。您需要用另一个字符串替换此匹配项bar以获得最终字符串foobarbuz。
你的问题可能是你认为正在
pattern.sub(repl, text)改变的text。Python 中的字符串是不可变的。要更改文本(获取新值):要仅替换数字,您可以使用先行断言:
给出了正确的答案。另一种选择(使用语法
\N)在组中,您需要准确选择应该保留在行中的内容,以便在“替换行”中使用它。
re.sub,相对而言,改变第二个参数,整个对象match,或match.group(0)。任何组(包括\0可以用在第二个参数中。粗略地说,它result = re.sub(pattern, rep, string)等同于不同之处在于,
rep您可以使用特殊字符\N进行替换m.group(N)。这正是你想要的方式
做不到。
另一种选择,但它很奇特:)