加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式, Python Re模块

发布时间:2020-12-14 06:14:10 所属栏目:百科 来源:网络整理
导读:一,正则表达式 1.常用正则表达式符号 符号 描述 正则表达式模式 匹配结果 ?a|b 匹配正则表达式 a或者 b a|b a,b ? ?. 匹配任意字符(除n以外) .abc 1abc,aabc,6abc ? ^ 从字符串开始匹配 ^String String ? $? 从字符串结尾匹配 End$ End ? * 匹配 0 次或

一,正则表达式

1.常用正则表达式符号

符号 描述 正则表达式模式 匹配结果
?a|b 匹配正则表达式 a或者 b a|b a,b
? ?. 匹配任意字符(除n以外) .abc 1abc,aabc,6abc
? ^ 从字符串开始匹配 ^String String
? $? 从字符串结尾匹配 End$ End
? * 匹配 0 次或者多次前面出现的正则表达式 123* 1233,12,123333
? + 匹配 1 次或者多次前面出现的正则表达式 123* 123,1233,123333
? ? 匹配 0次或者1次前面出现的正则表达式 123? 12,123
{n} 匹配n次前面出现的正则表达式 123{2} 1233
{n,m} 匹配 n~m次前面出现的正则表达式 123{2,4} 1233,12333,123333
[...] 匹配字符集的任意单一字符 12[abced] 12a,12b,12c
[x-y] 匹配 xy 范围中的任意单一字符 12[a-z] 12a,12f
[^…] 匹配不在字符集的任意单一字符 12[^abcde] 12f,12z
?(*+)? ?非贪婪匹配,在满足匹配条件的基础上尽可能少的匹配 ?123*?4 124
d 匹配十进制数字,相当于[0-9](D正好相反) ?dabc ?1abc,0abc
w 匹配任何字母数字字符,与[A-Za-z0-9_]相同( W 与之相反) waaa 1aaa,baaa,Aaaa
s 匹配任何空格字符,与[ntrvf]相同( S 与之相反) s n,t
b? 匹配任何单词边界( B 与之相反) bis is,isStr
A(Z) 匹配字符串的起始(结束) ADear Dear

  

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

二,Python re 模块

方法/函数 描述
compile(patternflags = 0) 使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象
match(patternstringflags=0) 使用带有可选的标记的正则表达式的模式来从String开始位置匹配字符串。如果匹配成功,就返回
匹配对象; 如果失败,就返回 None
?search(patternstringflags=0) 使用可选标记搜索字符串中第一次出现的正则表达式模式。 如果匹配成功,则返回匹配对象; 如果失败,则返回 None
?findall(patternstring [,flags] ) ?查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表
?split(patternstringmax=0) ?根据正则表达式的模式分隔符, split 函数将字符串分割为列表,然后返回成功匹配的
列表,分隔最多操作 max 次(默认分割所有匹配成功的位置)
?sub(patternreplstringcount=0) ?使用 repl 替换所有正则表达式的模式在字符串中出现的位置,除非定义 count, 否则就
将替换所有出现的位置
?group(num=0) ?返回整个匹配对象,或者编号为 num 的特定子组
?groups(default=None) ?返回一个包含所有匹配子组的元组(如果没有成功匹配,则返回一个空元组)
?groupdict(default=None) ?返回一个包含所有匹配的命名子组的字典,所有的子组名称作为字典的键

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

常用的模块属性

re.I、 re.IGNORECASE 不区分大小写的匹配
re.L、 re.LOCALE 根据所使用的本地语言环境通过w、 W、 b、 B、 s、 S 实现匹配
re.M、 re.MULTILINE ^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始和结尾
re.S、 rer.DOTALL “.” (点号)通常匹配除了n(换行符)之外的所有单个字符;该标记表示“.” (点号)能够匹配全部字符
re.X、 re.VERBOSE 通过反斜线转义, 否则所有空格加上#(以及在该行中所有后续文字)都被忽略,除非在一个字符类中或者允许注释并且提高可读性

?

?

?

?

?

?

?

?

?

?

?

三,实例

1.match()方法, 从字符串开始匹配,匹配成功返回匹配对象,否则返回None

>>> m = re.match(‘foo‘,‘foo‘) ? ? ? ? ? # 模式匹配字符串
>>> if m is not None: ? ? ? ? ? ? ? ? ? ? ?# 如果匹配成功,就输出匹配内容
... m.group()
?输出:foo

>>> m = re.match(‘foo‘,‘bar‘) ? ? ? ? ?# 模式并不能匹配字符串
>>> if m is not None: m.group() ? ? ?# ?如果省去if,报AttributeError 异常

?

2.search()在一个字符串中查找模式

>>>? m = re.search(‘foo‘,‘seafood‘)

>>>? ?if m is not None :

? ? ? ? ? ?m.group()

3.?匹配多个字符串

>>> bt = ‘bat|bet|bit‘ ? ? ? ? ? ? ?# 正则表达式模式: bat、 bet、 bit
>>> m = re.match(bt,‘bat‘) ? # ‘bat‘ 是一个匹配

?

4.?匹配任何单个字符

>>> anyend = ‘.end‘
>>> m = re.match(anyend,‘bend‘) ? ? # 点号匹配 ‘b‘

?

5.?重复、特殊字符以及分组

>>> m = re.match(‘www-ddd‘,‘abc-123‘)#匹配成功

>>> m = re.match(‘www-ddd‘,‘abc-xyz‘) ?#匹配失败

?

>>> m = re.match(‘(www)-(ddd)‘,‘abc-123‘)
>>> m.group() # 完整匹配
‘abc-123‘
>>> m.group(1) # 子组 1
‘abc‘
>>> m.group(2) # 子组 2
‘123‘
>>> m.groups() # 全部子组
(‘abc‘,‘123‘)

?

>>> m = re.match(‘(a(b))‘,‘ab‘) # 两个子组
>>> m.group() # 完整匹配
‘ab‘
>>> m.group(1) # 子组 1
‘ab‘
>>> m.group(2) # 子组 2
‘b‘
>>> m.groups() # 所有子组
(‘ab‘,‘b‘)

?

6.匹配字符串的起始

m = re.search(‘^The‘,‘The end.‘) # 匹配

?

7.findall()方法

>>> re.findall(‘car‘,‘carry the barcardi to the car‘)
[‘car‘,‘car‘,‘car‘]

?

8.使用 sub()和 subn()搜索与替换

>>> re.sub(‘[ae]‘,‘X‘,‘abcdef‘)
‘XbcdXf‘
>>> re.subn(‘[ae]‘,‘abcdef‘)
(‘XbcdXf‘,2)

?

9.split()分隔字符串

>>> re.split(‘:‘,‘str1:str2:str3‘)[‘str1‘,‘str2‘,‘str3‘]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读