一,正则表达式
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] | 匹配 x~y 范围中的任意单一字符 | 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 | 匹配任何空格字符,与[\n\t\r\v\f]相同( \S 与之相反) | \s | \n,\t |
\b | 匹配任何单词边界( \B 与之相反) | \bis | is,isstr |
\A(\Z) | 匹配字符串的起始(结束) | \ADear | Dear |
二,Python re 模块
方法/函数 | 描述 |
compile(pattern, flags = 0) | 使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象 |
match(pattern, string, flags=0) | 使用带有可选的标记的正则表达式的模式来从String开始位置匹配字符串。如果匹配成功,就返回 匹配对象; 如果失败,就返回 None |
search(pattern,string, flags=0) | 使用可选标记搜索字符串中第一次出现的正则表达式模式。 如果匹配成功,则返回匹配对象; 如果失败,则返回 None |
findall(pattern, string [,flags] ) | 查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表 |
split(pattern, string, max=0) | 根据正则表达式的模式分隔符, split 函数将字符串分割为列表,然后返回成功匹配的 列表,分隔最多操作 max 次(默认分割所有匹配成功的位置) |
sub(pattern, repl, string, count=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(‘\w\w\w-\d\d\d‘,‘abc-123‘)#匹配成功
>>> m = re.match(‘\w\w\w-\d\d\d‘,‘abc-xyz‘) #匹配失败
>>> m = re.match(‘(\w\w\w)-(\d\d\d)‘,‘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‘]