python中的re模块(正则表达式)

re模块是python中特有的,但是正则表达式是通用的。

正则表达式介绍

re模块常用函数


正则表达式介绍

(1)特殊符号处理常用逻辑

符号含义正则表达式可以匹配的例子不可能匹配的例子
.匹配任一字符"a.c""abc",''amc""addc","addds"
^匹配以某个字符开始的字符串"^a""accc""vccc"
$匹配以某个字符结尾的字符串"a$""csada""ssum"
[]匹配多个字符,可以将[]看作字典查找匹配"[abcd]""ab"

"mn" 

[^...]匹配非字符组中的字符"[^abc]""ssds""abc"
a|b匹配a或者b"root|cat""root""big"
()匹配括号内的表达式"(k|d)ing""ding""crying"

       重复型的匹配符号

符号含义正则表达式可以匹配的例子
+匹配一次或多次"(a|c)+d$""ad","caccd"
*匹配零次或多次"(a|c)*d$""d","aaad"
?匹配零次或一次"(a|c)?d$""ad","cd","d"
{n}匹配确定的 n次(n为正整数)"[0-9]{2}"      "21","26"
{n,}至少匹配n次"[0-9]{3,}"       "001","003003"
{n,m}最少匹配 n次且最多匹配 m 次"[0-9]{2,4}"         "23","231","6551"

关于[]一些常用的匹配:

字符含义
[0-9]匹配0-9这10个数字
[a-z]匹配a-z这26个小写字母
[A-Z]匹配A-Z这26个大写字母
[a-f0-7F-M]匹配a-f小写字母,匹配0-7数字,匹配F-M大写字母

转义字符 : \

在[]中有一些表达需要看作特殊符号,因此需要用到"\"。如果想要匹配某段文字中的一个"\",则需要4个反斜杠"\\\\"(在正则中需要4个)。解释:前两个反斜杠出来一个"\",后两个反斜杠也出来一个"\",这两个被送进正则表达中,由于"\"在正则中,有转义的作用,因此"\\"被翻译成一个普通的斜杠。

这时,可以利用原声字符串来解决这个问题,上面的这个可以写成 r"\\",即"\\"不转义直接送到正则表达式中,因此正则表达式读取后就是"\"。

在正则表达式中,转义字符加一些字母有一些特殊的意思,如下表所示。

字符说明正则表达式可以匹配的例子不可以匹配的例子
\d匹配一个数字"aca\d""aca2""acas"
\s匹配任意空白符"a\sb""a b" (一个空格)"abb"
\t匹配一个制表符"\t"  
\n匹配一个换行符"\nA"  
\w匹配字母、数字、下划线"a\wc""a_c""a$c"
\f匹配一个换页符   
\b匹配一个单词边界   

re模块常用函数

(1) re.match(regex, string, flags=0)

从字符串的起始位置匹配,匹配成功返回一个match对象,否则返回None

import re

regex = "a.c"
string = "abc"
print(re.match(regex,string))

output:
<_sre.SRE_Match object; span=(0, 3), match='abc'>

#含义:begin position:0 ;end position:3;match string is "abc"

(2) re.search(regex,string) 

扫描整个字符串并返回第一个成功的匹配的,如果没有就返回None

import re

regex = r"\d.\\c"
string = "1A\c2\sc"
print(re.search(regex,string))

output:
<_sre.SRE_Match object; span=(0, 4), match='1A\\c'>

(3)re.sub(regex, repl, string, count=0, flags=0)

替换字符串中的匹配项, regex 正则中的模式字符串,repl替换的字符串

count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配

flags是一个标志位,不怎么用不写了。

import re
regex = r'#.*$'
string = "2004-959-559 # 这是一个国外电话号码"
print(re.sub(regex,"",string))

output:
2004-959-559 

(4)re.compile(regex)

生成一个带有regex正则表达式的对象,供其他函数split,match,search使用。例子看(5)。

(5)re.split(regex, string,maxsplit)

按照能够匹配的子串将字符串分割后返回列表

import re
regex = "[a|b]+c"
pattern = re.compile("[a|b]+c")
string = "acbcbdcksnfcvscdbcacccbc"
print(re.split(regex,string,maxsplit=3)) #最大分隔3次
print(pattern.split(string))

output:
['', '', 'bdcksnfcvscd', 'acccbc']
['', '', 'bdcksnfcvscd', '', 'cc', '']

(6)re.findall(string,begin,end)

从字符串中找到匹配的所有子串,作为列表返回;如果没有找到匹配的,则返回空列表。

import re
pattern = re.compile("[a|b]+c")
string = "acbcbdcksnfcvscdbcacccbc"
print(pattern.findall(string))
print(pattern.findall(string,5,len(string))) 
### 从5位置开始匹配直到结尾

output:
['ac', 'bc', 'bc', 'ac', 'bc']
['bc', 'ac', 'bc']

(7)re.finditer(string)

与re.findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

import re
pattern = re.compile("[a|b]+c")
string = "acbcbdcksnfcvscdbcacccbc"
match = []
for i in pattern.finditer(string):
    match.append(i.group(0))
print(match)

output:
['ac', 'bc', 'bc', 'ac', 'bc']

 

参考:

https://www.runoob.com/python/python-reg-expressions.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Foneone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值