python3 reModule_sub 检索和替换.py

"""
模块:python3 reModule_sub.py
功能:python3 正则表达式 - 检索和替换。
参考:
    https://www.runoob.com/python3/python3-reg-expressions.html
    https://www.cnblogs.com/ssyfj/p/8522904.html
知识点:
1.re.sub(pattern, repl, string, count=0, flags=0) -> 替换后的字符串。
    替换字符串中的匹配项。
    pattern : 必选,正则中的模式字符串。
    repl : 必选,替换的字符串,或函数。
    string : 必选,要被查找替换的原始字符串。
    count : 可选,模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
    flags : 可选,编译时用的匹配模式,数字形式。
    运行机制:
        通过patter匹配相应的字符串,并把匹配到的字符串替换成repl,或替换成repl函数返回的字符串。
        repl(replacement), 替换掉 pattern 匹配到的字符串或处理 pattern 匹配到的字符串的函数。
        如果 repl 是字符串,反斜杠会在其中转义。
        如果 repl 是可调用的,它将传递匹配的对象,并且必须返回要使用的替换字符串。
"""
import re

# 1.提取电话号码。
phone = "2004-959-559 # 这是一个电话号码"
# 1.1.替换注释为空。
#     匹配以"#"号开头的任意字符串直到该字符串结束。
# num = re.sub(r'#.*$', "", phone)
num = re.sub(r'#.*', "", phone)
print(num)  # 2004-959-559
# 1.2.替换非数字内容为空。
num = re.sub(r'\D', "", phone)
print(num)  # 2004959559


def double(matchedObject):
    """
    将匹配的数字乘于 2。
    :param matchedObject: 匹配到的对象。
    :return: 字符串,用于替换匹配到的字符串。
    """
    print(matchedObject)
    # <re.Match object; span=(1, 3), match='23'>
    # <re.Match object; span=(4, 5), match='4'>
    # <re.Match object; span=(8, 11), match='567'>
    value = int(matchedObject.group('num'))
    return str(value * 2)


# 2.将字符串中的数字乘于 2。
#     r'(?P<num>\d+)'是将后面匹配的 \d+ 数据,取一个组名 num。
#     这个组名必须是唯一的,不重复的,没有特殊符号的。
#     函数可以获得这个组名下的数据。
#     一种方式是,正则匹配使用 group(组名) 可以获取到这个组名下的数据,
#     类似 group(1),group(2)。
print("\n2.")
s = 'A23G4HFD567'
s2 = re.sub(r'(?P<num>\d+)', double, s)
print(s2)
# A46G8HFD1134

# 3.格式化日期。
#     (),代表要提取的内容(组)。
#     \1...\9,匹配第n个分组的内容。
#     \d{4},表示匹配4个连续数字。
print("\n3.")
s = '2017-11-27'
print(re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', s))
# 11/27/2017

# 4.匹配标点符号、换行实例。
print("\n4.")
s = "you're asking me out.that's so cute.what's your name again?"
print(re.sub(r"([.!?])", r"\1\n", s))
# you're asking me out.
# that's so cute.
# what's your name again?

# 5.当使用 re.sub() 的可选参数时,位置传参要传入所有可选参数。
#   或者使用关键字传参。
# re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符)
print("\n5.")
print(re.sub('123.*', '123*', '123ab\nc'))
# 123*
# c
print(re.sub('123.*', '123*', '123ab\nc', 0, re.S))
# 123*
print(re.sub('123.*', '123*', '123ab\nc', flags=re.S))
# 123*

# re.compile(pattern, flags).sub(repl, string, count=0)
#     返回替换后的字符串。
regex = re.compile('123.*', re.S)
print(regex.sub('123*', '123ab\nc'))
# 123*



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值