在Python中,sub()
方法是一个强大的工具,用于在字符串中执行替换操作。
这个方法属于 re
(正则表达式)模块,因此在使用之前需要先导入 re
模块。
Python 的 re
模块提供了 re.sub
用于替换字符串中的匹配项。
语法:
re.sub(pattern, repl, string, count=0)
参数:
pattern
: 正则中的模式字符串。repl
: 替换的字符串,也可为一个函数。string
: 要被查找替换的原始字符串。count
: 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
sub()
方法
正则表达式不仅能找到文本模式,而且能够用新的文本替换掉这些模式。
Regex
对象的 sub()
方法需要传入两个参数。
第一个参数是一个字符串,用于取代发现的匹配。
第二个参数是一个字符串,即正则表达式。
sub()
方法返回替换完成后的字符串。
例如,在交互式环境中输入以下代码:
import re
namesRegex = re.compile(r'Agent \w+')
namesRegex.sub('CENSORED', 'Agent Alice gave the secret documents to Agent Bob.')
'CENSORED gave the secret documents to CENSORED.'
有时候,可能需要使用匹配的文本本身,作为替换的一部分。
在 sub()
的第一个参数中,可以输入\1、\2、\3......。
表示“在替换中输入分组1、2、3......的文本”。
例如,假定想要隐去密探的姓名,只显示他们姓名的第一个字母。
要做到这一点,可以使用正则表达式 Agent(\w)\w*
,
传入 r'\l****'
作为 sub()
的第一个参数。
字符串中的 \1
将由分组1匹配的文本所替代,
也就是正则表达式的(\w
)分组。
agentNamesRegex =re.compile(r'Agent (\w)\w*')
agentNamesRegex.sub(r'\1****','Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.')
'A**** told C**** that E**** knew B**** was a double agent.'
示例如下:
phone = "2004-959-559 # 这是一个电话号码"
删除注释
num = re.sub('#.*$', "", phone)
print ("电话号码 : ", num)
电话号码 : 2004-959-559
移除非数字的内容
num = re.sub('\D', "", phone)
print ("电话号码 : ", num)
电话号码 : 2004959559
<>:1: SyntaxWarning: invalid escape sequence '\D' <>:1: SyntaxWarning: invalid escape sequence '\D' /tmp/ipykernel_4938/2320374763.py:1: SyntaxWarning: invalid escape sequence '\D' num = re.sub('\D', "", phone)
def double(matched):
value = int(matched.group('value'))
return str(value * 2)
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))
A46G8HFD1134
<>:6: SyntaxWarning: invalid escape sequence '\d' <>:6: SyntaxWarning: invalid escape sequence '\d' /tmp/ipykernel_4938/1975473484.py:6: SyntaxWarning: invalid escape sequence '\d' print(re.sub('(?P<value>\d+)', double, s))
def double(matched):
value = matched.group('value')
return value.strip().strip('`')
s = 'A23G4HFD``567'
print(re.sub('(?P<value>``.*?``)', double, s))
A23G4HFD``567
uu = re.search('(?P<value>\d+)', s)
<>:1: SyntaxWarning: invalid escape sequence '\d' <>:1: SyntaxWarning: invalid escape sequence '\d' /tmp/ipykernel_4938/260748114.py:1: SyntaxWarning: invalid escape sequence '\d' uu = re.search('(?P<value>\d+)', s)
uu
<re.Match object; span=(1, 3), match='23'>
uu.group()
'23'