python re模块匹配字符串

本文介绍了Python3中的re模块,包括match函数用于从字符串开始位置匹配模式,search函数可以在任意位置匹配并返回第一个匹配项,compile函数用于编译正则表达式,以及带括号的正则模板用于捕获匹配内容。此外,还提到了findall函数用于查找所有匹配项,以及str.capitalize()方法用于首字母大写。
摘要由CSDN通过智能技术生成

1,python 正则模块re

    要使用python3中的RE则必须引入 re模块

import re

2,match函数

result = re.match('^[A-Z]{1}[a-z]+', s)

 match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

匹配到了,则result 保存匹配到的结果

如下代码:

import re



def format_name(s):

    result = re.match('^[A-Z]{1}[a-z]+', s)

    if result:

        st = s

    else:

        st = s.capitalize()

    return st



print(list(map(format_name, ['adam', 'LISA', 'barT'])))

 结果:  ['Adam', 'Lisa', 'Bart']

正则表达式: ^[A-Z]{1}[a-z]*。匹配的是大写字母开头的字母

str的capitalize函数

capitalize() 返回一个字符串,首字母为大写,其他字母为小写

使用形式:str.capitalize()

注意,capitalize()返回的是str的一个副本,这个副本的特点是首字母大写,其余字母小写,并不改变str。

3,search 函数

模式编译后的对象的search函数 

pattern.search(string, pos=0, endpos, *, pattern=None) 

匹配字符串,默认从字符串的开头开始匹配,也可以通过pos和endpos来指定字符串的匹配位置(match默认从字符串开头开始匹配,pos=0)。找到match对象,通过group返回结果,未匹配返回None。多个匹配,也只返回第一个匹配的对象。

p=re.compile(r'\d+\s?\w*')
#不指定匹配区间
ss="kkkssss132ss"
aa = p.search(ss)
if aa:
      print ('匹配的内容是:', aa.group())
else:
      print ("正则表达式没有匹配到内容")

结果: 

匹配的内容是: 132ss

指定字符串开始结束匹配坐标

bb = p.search('98hsgdhh2345kjh',4,10)
if bb:
      print ('匹配的内容是:', bb.group())
else:
      print ("正则表达式没有匹配到内容")

结果:

匹配的内容是: 23

返回第一次匹配到的对象

ss="kkkssss132ss897"
aa = p.search(ss)
if aa:
      print ('匹配的内容是:', aa.group())
else:
      print ("正则表达式没有匹配到内容")

结果:

匹配的内容是: 132

re.search函数 

re. search(pattern, string, flags=0) 跟pattern的search相比,不可指定pos和endpos。从字符串开头开始匹配,一旦找到第一个匹配的就返回。
 

4,compile函数

编译模板成为模板对象。编译后的模板对象可多次使用去匹配模板。

import re
text1="11/27/2012"
text2="Nov 27,2012"
datepat1=re.compile(r"\d+/\d+/\d+")
match_res1=datepat1.match(text1)
print(match_res1)
match_res2=datepat1.match(text2)
print(match_res2)

 结果:

<re.Match object; span=(0, 10), match='11/27/2012'>
None

5,带括号的正则模板

带括号的正则模板,此为匹配内容捕获。

datepat2=re.compile(r"(\d+)/(\d+)/(\d+)")
match2_res1=datepat2.match(text1)
print(match2_res1)
match2_res2=datepat2.match(text2)
print(match2_res2)

结果:

<re.Match object; span=(0, 10), match='11/27/2012'>
None

要是查看捕获的分组,使用group及groups方法

print("_________group_________")
print(match2_res1.group())
for index,matched_text in enumerate(match2_res1.group()):
    print("group index:",index)
    print(matched_text)
print("_________groups_________")
print(match2_res1.groups())
for index,matched_text in enumerate(match2_res1.groups()):
    print("groups index:",index)
    print(matched_text)

_________group_________
11/27/2012
group index: 0
1
group index: 1
1
group index: 2
/
group index: 3
2
group index: 4
7
group index: 5
/
group index: 6
2
group index: 7
0
group index: 8
1
group index: 9
2
_________groups_________
('11', '27', '2012')
groups index: 0
11
groups index: 1
27
groups index: 2
2012

6,findall()函数

匹配所有,区别于match的从头开始匹配 ,findall()可以从任何地方匹配

text3="11/27/2012 11/02/2019"
match3_res1=datepat2.findall(text3)
print(match3_res1)

结果:[('11', '27', '2012'), ('11', '02', '2019')]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值