python正则表达式、re的简单使用

一. 正则表达式

  1. 匹配次数:

+:前面模式匹配一次或多次,>=1。
?:前面模式匹配零次或一次,=0 or =1。
*:前面模式匹配零次或多次,>=0。
{min,max}:前面模式匹配具体次数。>=min and <=max,min和max都可以省略表示不限定最小最大值。min和max之间只能有一个逗号,加个空格就不行了,比如{min, max}就不行(写其他语言习惯性加空格了)。

  1. 使用()进行分组,供match object group()与groups()使用:

  2. 使用 | 选择其一,返回值为第一个匹配到的。

  3. 反斜杠加字符组成特殊字符

\d:匹配数字0-9,相当于[0-9]。
\D:匹配除了数字0-9之外的其他字符,相当于[^0-9]。
\w:匹配字母、数字、下划线,相当于[0-9a-zA-Z_]。
\W:匹配除了字母数字下划线外的其他字符,相当于[^0-9a-zA-Z_]。
\s:匹配空格、\t、\n,只要是空白就可以匹配。
\S:除了空格、\t、\n之外的其他字符。

总之大写就是小写的对立面,我认为可以看作取反操作。

  1. 使用 [] 方括号匹配其中指定字符:

方括号中普通正则表达式失效,如*?等就表示本身,没有其他含义。
方括号内可以使用 ^ 来表示除了方括号中其他元素之外的字符,[^0-9]表示除了0-9之外的字符。
方括号内可以使用 - 来表示一个范围,[a-z]表示所有小写字母。

  1. 可以使用 ?选择非贪婪匹配

贪婪匹配尽可能多的找,非贪婪匹配尽可能少的找。
*?、{min,max}?、+?都表示前面的进行非贪婪匹配。

  1. 使用 ^ $匹配行首行尾

  2. 使用 . 匹配除换行符之外的任何字符

二. 使用re

  1. 使用compile产生一个正则对象,称为pattern object:
    compile可以传入第二个参数:
    re.DOTALL:. 符号代表所有符号,包括换行符。
    re.I:忽略大小写。
import re

pattern_object = re.compile(r"\w+", re.I | re.DOTALL)
  1. pattern object的方法:

search(): 如果找不到返回None,找到返回一个对象,在此称为match object。

pattern_object = re.compile(r"[a-z]+")
#如果匹配到就返回一个match object,没有匹配到就返回None
match_object_1 = pattern_object.search("777777") #未匹配,返回None
match_object_2 = pattern_object.search("sanshi") #返回match object

findall():
如果正则表达式没有()分组:返回列表,每个元素为字符串。
如果正则表达式有()分组:返回列表,每个元素为元组。

pattern_object_1 = re.compile(r"[a-z]+")
str_list = pattern_object_1.findall("san777shi")#['san','shi']

pattern_object_2 = re.compile(r"([a-z])([a-z])([a-z])")
tuple_list = pattern_object_2.findall("san777shi")#[('s','a','n'),('s','h','i')]

sub():
第二个参数中匹配到的部分替换为第一个参数。

pattern_object = re.compile(r"[a-z]+")
str_tmp = pattern_object.sub('xxx', 'sanshi777') #替换后为xxx777
  1. match object的方法:

group():match object(请见使用re部分)调用group方法时:
参数为0或者没有:整个匹配的文本。
参数为具体数字:打印数字对应的小括号中的文本。

groups():match object调用groups方法时,返回值为匹配到的值构成元组。

pattern_object = re.compile(r"([a-z]+)([0-9]+)")
match_object = pattern_object.search("sanshi777")

print(match_object.group()) #sanshi777. same to match_object.group(0)
print(match_object.group(1)) #sanshi
print(match_object.group(2)) #777
#print(match_object.group(3)) error,没有3

print(match_object.groups()) #('sanshi', '777')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值