正则表达式用于匹配字符串
正则表达式匹配过程
依次取出公式和文本字符串进行比较
如果所有字符都匹配,则匹配成功。 如果有不匹配的字符,则匹配失败
与量词有边界时,匹配过程略有不同
正则表达式语法规则
语法
说明
表达式实例
匹配字符串
文字
水平。
匹配除换行符“n”以外的任何字符串
abc
abc
转义字符中,下一个字符改变原来的意思
ac
ac
[.]
字符集。 相应位置是字符集中的任何字符,可以一次列出字符集中的一个字符,也可以指定范围,如[abc]或[a-c]。 如果第一个字符为^,则表示反转;如果为[^abc],则表示不是abc的其他字符。 所有特殊字符在字符集中都失去了本来的特殊含义。 在字符集中,可以使用^、]或-并使用转义字符进行匹配
a[bcd]e
abe
ace
ade
预定义的字符集
d
数字: [0-9]
adc
a1c
D
非数字: [^0-9]
aDc
abc
s
空白字符: [trnfv]
asc
a c
S
非空白字符: [^s]
aSc
abc
w
单词: [a-zA-z0-9_]
awc
abc
W
非单词字符: [^w]
aWc
a c
数量词
*
与字符串0或无限次一致
abc*
ab
abc
阿布拉克抄送
一个字符串匹配一次或无限次
abc
abc
阿布拉克抄送
?
字符串匹配0次或1次
abc?
ab
abc
{m}
使字符串匹配m次
Abc
亚贝卡省
{m,n}
使字符串一致m次到n次
Abc { 2,3 }
亚贝卡省
阿布拉克抄送
边界一致
^
匹配字符串的开头
^abc
abc
$
匹配字符串的末尾
abc$
abc
A
匹配字符串的开始
Aabc
abc
Z
如果匹配字符串结束且有换行,则仅与换行前的结束字符串匹配
abcZ
abc
b
匹配单词边界,也就是单词和空格之间的位置。 例如,“erb”与“never”的“er”匹配,但与“verb”的“er”不匹配。
B
与单词以外的边界一致。 “erB”与“verb”的“er”匹配,但与“never”的“er”不匹配。
逻辑组
|
匹配|式的左右任意一个
abc|def
abc
德夫
(…) )。
作为组,每次将组号加1时,使用分组的好处是匹配的子字符串保存在子组中,以便以后使用
(abc ) {2}
阿布拉克足球俱乐部
(? p . )
除了原始号码之外,还将别名添加到组中
(? pabc {2}
阿布拉克足球俱乐部
参照编号number的组一致的字符串
(d ) ab ) 1
1ab1
5ab5
(? P=name )
应用别名name组匹配的字符串
(? Pabc ) ee (? P=name )
abceeabc
特殊结构(不分组) )
(? )
() )的未分组版本。 |或用于后面的数量词
(? 3360ABC({2}
阿布拉克足球俱乐部
(? iLmsux )
iLmsux中的每个字符都表示正则表达式的匹配模式,只能在正则表达式的开头使用,并且可以选择多个
(? I ) abc
AbC
(? # . )
将#后的字符作为注释忽略
abc (? #comment(def
abcdef
(?=. )
在之后的字符串表达式中
匹配才能成功,不消耗字符串内容a(?=d)
后面是数字的a
(?!...)
之后的字符串表达式需要不匹配才能成功,不消耗字符串内容
a(?!d)
后面不是数字的a
(?<=...)
之前的字符串表达式需要匹配才能成功,不消耗字符串内容
(?<=d)a
前面是数字的a
(?
之前的字符串表达式需要不匹配才能成功,不消耗字符串内容
(?
前面不是数字的a
(?(id/name)yes_
pattern|no_parttern)
如果匹配到分组为id或别名name的字符串成功匹配,则需要匹配yes_pattern
不成功,怎需要匹配no_pattern
(d)abc(?(1)d|def)
1abc3
abcdef
贪婪模式和非贪婪模式
贪婪模式是尽可能多的匹配字符串,python默认为贪婪模式,非贪婪模式尽可能少的匹配字符串,在正则表达式后面加个?表示非贪婪模式。例如:字符串abcccb,贪婪模式正则表达式为ab.*c,非贪婪模式的正则表达式为ab.*?c,贪婪模式结果为abccc,非贪婪模式结果为abc,再比如字符串abbb,贪婪模式正则表达式为ab?,非贪婪模式正则表达为ab??,贪婪模式结果为ab,非贪婪结果为a。
python的re模块
re模块的方法:
1.compile(pattern[,flag]):对正则表达式pattern进行编译,编译后比直接查找速度快
2.match(patter,string[,flag]):从字符串string的开始就匹配,若匹配成功,则返回匹配对象,否则返回None(None对象没有group()和groups()方法,不判断直接调用这两个方法,则会出现异常)
3.search(pattern,string[,flag]):从字符串中查找,若匹配成功,则返回匹配对象,否则返回None
4.findall(pattern,string[,flag]):在字符串 string 中查找正则表达式模式 pattern 的所有(非重复)出现;返回一个匹配对象的列表
5.finditer(pattern,string[, flags])b 和 findall()相同,但返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个匹配对象
6.split(pattern,string, max=0) 根据正则表达式 pattern 中的分隔符把字符 string 分割为一个列表,返回成功匹配的列表,最多分割 max 次(默认是分割所有匹配的地方)
7.sub(pattern, repl, string, max=0) 把字符串 string 中所有匹配正则表达式 pattern 的地方替换成字符串 repl,如果 max 的值没有给出, 则对所有匹配的地方进行替换
匹配对象的方法和属性:
string:匹配时所使用的文本
re:匹配时使用的pattern对象
group(num=0) 返回全部匹配对象(或指定编号是 num 的子组)
groups() 返回一个包含全部匹配的子组的元组(如果没有成功匹配,就返回一个空元组)
参数flag:
re.I
使匹配对大小写不敏感
re.L
做本地化识别(locale-aware)匹配
re.M
多行匹配,影响 ^ 和 $
re.S
使 . 匹配包括换行在内的所有字符
re.U
根据Unicode字符集解析字符。这个标志影响 w, W, b, B.
re.X
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
python使用正则表达式的例子
总结
以上所述是小编给大家介绍的python正则表达式及使用正则表达式的例子,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/time-read/p/8319477.html