python笔记54-re正则匹配替换字符串(sub和subn)

前言

python 里面可以用 replace 实现简单的替换字符串操作,如果要实现复杂一点的替换字符串操作,需用到正则表达式。
re.sub用于替换字符串中匹配项,返回一个替换后的字符串,subn方法与sub()相同, 但返回一个元组, 其中包含新字符串和替换次数。

sub介绍

Python 的 re 模块提供了re.sub用于替换字符串中的匹配项,sub是substitute表示替换。

  • pattern:该参数表示正则中的模式字符串;

  • repl:repl可以是字符串,也可以是可调用的函数对象;如果是字符串,则处理其中的反斜杠转义。如果它是可调用的函数对象,则传递match对象,并且必须返回要使用的替换字符串

  • string:该参数表示要被处理(查找替换)的原始字符串;

  • count:可选参数,表示是要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有的匹配都会被替换;

  • flags:可选参数,表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默认为0。

def sub(pattern, repl, string, count=0, flags=0):
"""Return the string obtained by replacing the leftmost
non-overlapping occurrences of the pattern in string by the
replacement repl. repl can be either a string or a callable;
if a string, backslash escapes in it are processed. If it is
a callable, it's passed the match object and must return
a replacement string to be used."""
return _compile(pattern, flags).sub(repl, string, count)

sub使用示例

将字符串中的数字替换成*号

import re
'''
替换字符串中的数字为*号
'''
s = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏'

new = re.sub("[0-9]", "*", s)
print(new)
# 作者-上海悠悠 QQ交流群:********* blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏

把字符串 s 中的每个空格替换成”%20”

import re
'''
替换s中的空格为%20
'''
s = "We are happy."
print(re.sub(r' ', "%20", s))

# We%20are%20happy.

把字符串中的连续数字替换成hello

import re
'''
把字符串中的连续数字替换成hello
'''
s = "the number 200-40-3000"
print(re.sub(r'[\d]+', "hello", s))

# the number hello-hello-hello

替换时间格式 01/11/2021 替换成 2021/01/11

import re
'''
替换时间格式 01/11/2021 替换成 2021/01/11
'''

s = "today is 01-11-2021."
day = re.sub(r'(\d{2})-(\d{2})-(\d{4})', r'\3-\2-\1', s)
print(day) # today is 2021-11-01.

# 也可以用g<3>-g<2>-g<1>
day2 = re.sub(r'(\d{2})-(\d{2})-(\d{4})', r'g<3>-g<2>-g<1>', s)
print(day) # today is 2021-11-01.

\3\g<3>指代的的都是前面匹配的第3个分组

repl传函数对象

匹配字符串中的数字加2

import re
'''
匹配字符串中的数字加2
'''

def addAge(match) ->str:
'''返回匹配的值加2'''
age = match.group()
return str(int(age)+2)

s = 'my age is 20'
# repl 如果它是可调用的函数对象,则传递match对象,并且必须返回要使用的替换字符串
x = re.sub(r'[\d]+', addAge, s)
print(x)
# my age is 22

count替换次数

sub 加 count 参数可以控制要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有的匹配都会被替换;

import re

'''
替换字符串中的空格为%20,只替换一次
'''
s = "We are happy."
print(re.sub(" ", "%20", s, count=1))

# We%20are happy.

subn方法使用

subn方法与sub()相同, 但返回一个元组, 其中包含新字符串和替换次数。

import re

'''
替换字符串中的空格为%20,只替换一次
'''
s = "We are happy."
x, n = re.subn(" ", "%20", s, )
print("替换后:", x)
print("替换次数: ", n)

运行结果
替换后:We%20are%20happy.
替换次数:  2

2021年第六期《python接口自动化+测试开发》课程,1月9号开学(火热报名中!)

本期上课时间:1月9号-4月18号,每周六、周日晚上20:30-22:30

(0)

相关推荐

  • 正确的正则表达式学习方法是放弃抵抗^_^

    一.re库常用方法 re库常用函数 作用 re.findall(pattern, string) 根据pattern返回匹配结果(列表) re.split(pattern, string) 使用pat ...

  • Python正则表达式,这一篇就够了

    大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达式的函数. re模块主要定义了9个常量.12个函 ...

  • Python笔记:字符串操作

    a = 'test 123 dfg test'## 方法1len([i for i in a.split(' ') if i == test])## 方法2len(a.split('test'))-1 ...

  • 比正则快M倍?!Python替换字符串的新姿势

    大家好,欢迎来到 Crossin的编程教室 ! 我们在写代码的时候经常会遇到需要替换文本中字符串的情况.如果替换的不是固定字符,而是某种字符规律,那就要用到正则表达式.今天我们要给大家分享一个效率更高 ...

  • python笔记51-re正则匹配findall

    前言 re是python的一个正则匹配库,可以使用正则表达式匹配出我们想要的内容 findall 使用 findall 看下源码介绍, 返回字符串中所有不重叠匹配项的列表. findall匹配的时候, ...

  • python笔记52-re正则匹配search

    前言 re.search扫描整个字符串并返回第一个成功的匹配.re.findall返回字符串中所有不重叠匹配项的列表,如果没有匹配到返回空list不会报错. search匹配对象有3个方法:group ...

  • python笔记56-re正则匹配re.match

    前言 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. re.search 扫描整个字符串并返回第一个成功的匹配. re.match ...

  • 用正则匹配富文本中的文本,并替换其内容

    问题描述: 有这样的一段字符串: "<p class='test' id='wise'>123 4>5<6 789<br>hello<span ti ...

  • 完整版Python笔记|超级有用

    完整版Python笔记|超级有用

  • 【python笔记】python java 语法,对比学习

    【python笔记】python java 语法,对比学习

  • python笔记2-冒泡排序

    前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序. 一.基本原理 1.概念: 冒泡排序(Bubble Sort),是一种 ...