Python学习(正则表达式与模式匹配下篇)

十、通配字符:.(句点)字符称为“通配符”,它匹配除换行之外的所有字符,一次只会匹配一个字符。

>>> nums = re.compile(r'20.')
>>> num = nums.findall('2017 2018 2019')
>>> num
['201', '201', '201']
>>> nums = re.compile(r'20..')
>>> num = nums.findall('2017 2018 2019')
>>> num
['2017', '2018', '2019']

十一、用点和星匹配所有字符:点不能唯一不能匹配换行符,可以在compile()中再加一个参数。

>>> somes = re.compile(r'.*',re.DOTALL)
>>> some = somes.search('dsauygfisaf65s4df64s65')
>>> some.group()
'dsauygfisaf65s4df64s65'

十二、不区分大小写的匹配 :添加re.I参数。

>>> chars = re.compile('CsDn')
>>> char = chars.search('CSDN cSDN CsDn')
>>> char.group()
'CsDn'
>>> chars = re.compile('CsDn',re.I)
>>> char = chars.search('CSDN cSDN')
>>> char.group()
'CSDN'

十三、用sub()方法替换字符串:sub()需传入两个参数,第一个参数是用来替换的字符串,用于取代发现的匹配。第二个参数是一个字符串,即正则表达式要匹配的文本。

>>> import re
>>> name = re.compile(r'\w+')
>>> name.sub('Lee','Tony')
'Lee'
有时候,你可能需要使用匹配的文本本身作为替换的一部分。在 sub() 的第一个参数中,可以输入 \1 \2 \3…… 来表示“在替换中输入分组(\w) 1 2 3…… 的文本”。例如:如果想要隐去密探的姓名,只显示他们姓名的第一个字母,你可以使用正则表达式 Agent(\w)\w* ,传入 r'\1****' 作为 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.'
十四、 管理复杂的正则表达式:

如果正则是这样的:phoneRegex = re.compile(r'((\d{3(\s*(ext|x|ext.)\s*\d{2,5})?)'),将会不利于识别,我们可以用添加re.VERBOSE参数给它进行分开注释,#符号和它后面直到行末的内容都会被忽略。而且表示正则表达式的多行字符串中,多余的空白字符也不认为是要匹配的文本模式的一部分。

>>> phoneRegex = re.compile(r'''(

    (\d{3}|\(\d{3}\))?              # area code

    (\s|-|\.)?                      # separator

    \d{3}                           # first 3 digits

    (\s|-|\.)                       # separator

    \d{4}                           # last 4 digits

    (\s*(ext|x|ext.)\s*\d{2,5})?    # extension

    )''', re.VERBOSE)
compile()只能接受一个值作为它的第二参数,如果想做多种判断,比如前面说的忽略大小写字母,可以 使用管道字符( | 来分割判断条件,满足多种需求。

>>> someRegexValue = re.compile('foo', re.IGNORECASE | re.DOTALL | re.VERBOSE)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值