Python正则表达式--每日一点 检索和替换
简单的对上期的search和match进行一下简单补充,两者最大的区别在于match是从开始部分进行匹配,没有匹配到就返回空,而search是整句扫描进行匹配
好了,开始今天的内容
大家看下这段代码
patter1 = '#.*$' # 删除注释的正则表达式
patter2 = '\D' # 删除非数字的正则表达式
source = "15527%051_13-2 #这是电话"
print(source)
result = re.sub(patter1, '', source) # 把注解删掉
print(result)
result2 = re.sub(patter2, '', result) # 把非数字的删掉
print(result2)
# 控制台打印出来的结果为:
#15527%051_13-2 #这是电话
#15527%051_13-2
#15527051132
分析这个sub方法的参数问题
'''
下面有四个参数
1 pattern 很明显是匹配规则
2 repl是替换的字符串
3 string 需要处理的字符串
4 count是表示匹配后替换的个数,一般是0,表示把匹配到的全部给替换掉,一般不写
5 这个是标志位,是否忽视大小写等等之类的
# re.sub(pattern, repl, string, count=0 , flag=None)
'''
```
## 在看下下面的代码
```python
inputStr = "hello python,ni hao c,zai jian python"
replaceStr = re.sub(r"hello (\w+),ni hao (\w+),zai jian \1", "PHP", inputStr)
print(replaceStr)
inputStr = "hello python,ni hao c,zai jian python"
replaceStr = re.sub(r"hello (\w+),ni hao (\w+),zai jian \2", "PHP", inputStr)
print(replaceStr)
#打印结果
#PHP
#hello python,ni hao c,zai jian python
<div class="se-preview-section-delimiter"></div>
为什么会产生这样的结果呢,我们逐一的分析下
- 用 PHP来代替 hello (\w+),ni hao (\w+),zai jian \1匹配到的内容 ,当然全部匹配到了,所以返回PHP
\1 表示取第一个分组匹配到的内容,也就是python这个字符串作为匹配格式,放到\1这个位置进行匹配,python刚好匹配到了python。如果换成\2的话就是,C匹配python,肯定匹配不成功,如果是这样的话就会返回原来的字符串,就如同第二个例子
使用函数来处理匹配
这里写代码片
> 为什么会产生这样的结果呢,我们逐一的分析下
- 用 PHP来代替 hello (\w+),ni hao (\w+),zai jian \1匹配到的内容 ,当然全部匹配到了,所以返回PHP
\1 表示取第一个分组匹配到的内容,也就是python这个字符串作为匹配格式,放到\1这个位置进行匹配,python刚好匹配到了python。如果换成\2的话就是,C匹配python,肯定匹配不成功,如果是这样的话就会返回原来的字符串,就如同第二个例子
## 使用函数来处理匹配
```python
def pythonReSubDemo():
# 源字符串
inputStr = "hello 123 world 456"
def _add111(matched):
print("执行----")
intStr = matched.group("number") #123
intValue = int(intStr)
addedValue = intValue + 111 #234
addedValueStr = str(addedValue)
return addedValueStr
replacedStr = re.sub("(?P<number>\d+)", _add111, inputStr)
print("replacedStr=", replacedStr) #hello 234 world 567
'''
(?P<number>\d+)这个是分组,然后在指定一个额外的别名,也就是number 在上面就有获取这个分组
'''
# 控制台打印的结果为
#执行----
#执行----
#replacedStr= hello 234 world 567
从上面控制台打印的结果来看,_add111这个方法是执行了两次。
replacedStr = re.sub(“(?P\d+)”, _add111, inputStr)在这个匹配中对匹配的进行分组命名为number 每匹配到一次就执行 _add111这个方法,然后通过分组名来拿到指定的匹配值 return 返回后就进行替换了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)