正则表达式

本文深入解析Python正则表达式的使用技巧,包括元字符、search、match、split、sub及compile方法详解,通过实例演示如何高效进行字符串匹配与处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户 python编译器 RE 字符转换 特殊字符处理 字符转换 特殊字符处理 用户 python编译器 RE

1. 元字符

字符解释
.通配符,除了换行符外都能匹配
^匹配最开始的首字母
$匹配最结尾的字母
*重复匹配无穷次
+前面一个字符匹配至少一次至无穷次
?前面一个字符匹配0次或者1次
{n}定义前一个字符n次
[]字符集,取里面的一个字符,没有元字符功能(例外:\ ^取反 -范围),[a,b] a或者b、[a-z] a到z
|管道符
()分组
\反斜杆后面跟元字符变成普通字符,反斜杠后面跟普通字符后面变成特殊字符
\d匹配任何十进制数字;相当于类 [0-9]
\D与 \d 相反,匹配任何非十进制数字的字符;相当于类 [^0-9]
\s匹配任何空白字符(包含空格、换行符、制表符等);相当于类 [ \t\n\r\f\v]
\S与 \s 相反,匹配任何非空白字符;相当于类 [^ \t\n\r\f\v]
\w匹配任何字符,见上方解释
\W于 \w 相反
\b捕捉特殊字符的边界
\B与 \b 相反
     (pattern,sting,flags)
  1. findall()所有结果都返回到一个列表里

    #匹配包括w和l中间任意字母 如果完全匹配直接用find 
    >>>re.findall('w\w{2}l','hello world')
    结果['worl']
    #匹配sim开头的字符串
    >>>str = 'simon python study'
    >>>re.findall('^sim.*',str)
    结果['simon python study']
    #匹配dy结尾的字符串
    >>>re.findall('.*dy$',str)
    结果['simon python study']
    #匹配st开始包括后面任意长度字符串
    >>>re.findall('st.*',str)
    ['study']
    >>>re.findall('p*y',str)
    结果['py', 'y']
    >>>str = 'aaaaaaaaaaab'
    >>>re.findall('a{1,3}b',str)
    结果['aaab']贪婪匹配,匹配最多的三次
    >>>re.findall('a[gh]b','agbfffffahbfffffffaghb')
    结果 ['agb', 'ahb']二选一
    #[]字符集
    >>>re.findall('[^f,a]','agbfffffahbfffffffaghb')
    结果['g', 'b', 'h', 'b', 'g', 'h', 'b']
    #\b 捕捉a后特殊字符
    >>>re.findall(r'a\b','abcd a bcd a*cd')
    结果['a', 'a']
    

2. search()返回的是一个对象,如果没有匹配成功报错

    >>>print(re.search('simon','simon is in study'))
    结果<_sre.SRE_Match object; span=(0, 5), match='simon'>
    >>>print(re.search('simon','simon is in study').group())
    结果simon
    >>>re.findall('\\\\','fff\dkkk')
    ['\\']
    re.findall(r'\\','fff\dkkk')
    ['\\']
    >>>re.search('(fg)|3','abcdefgfgfg').group()
    结果'fg'
    >>>re.search('(?P<id>\d{3})(?P<name>\w{3})','wwwww34ttt123ooo').group()
    结果'123ooo' #分组匹配命名
	>>> re.search('(?P<id>\d{2})(?P<name>\w{3})','wwwww34ttt123ooo').group()
	结果'34ttt'

3. match()只在字符串开始匹配,返回对象

    >>>re.match('abc','abcdefg').group()
    结果'abc'

4. re.split()

    >>>re.split('[b,f]','abcdbefg')
    结果['a', 'cd', 'e', 'g']

5. re.sub()

    >>>re.sub('s+','haha','abcdsssefsssssssssssg')
    结果'abcdhahaefhahag'

6. re.compile()编译为一个可重复使用的pattern

    >>>reobj = re.compile('\.com$')
    >>>reobj.findall('www.test.com')
    结果['.com']
    >>>reobj.search('www.demo.com').group()
    '.com'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值