python之正则表达式

Python中写正则表达式时推荐使用原生字符串

数量词的贪婪模式与非贪婪模式

正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"。

 

正则表达式元字符

^ 匹配字符串的开始
$ 匹配字符串的结束
? 对于前一个字符字符重复0次到1次
* 对于前一个字符重复0次到无穷次
+ 对于前一个字符重复1次到无穷次
{m} 对于前一个字符重复m次
{m,n} 对前一个字符重复为m到n次
\d 匹配数字,相当于[0-9]
\D 匹配任何非数字字符,相当于[^0-9]
\s 匹配任意的空白符,相当于[ fv]
\S 匹配任何非空白字符,相当于[^ fv]
\w 匹配任何字母数字字符,相当于[a-zA-Z0-9_]
\W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
. 匹配除换行符以外的任意字符
[...] 字符集,所有的特殊字符在这里都是去意义(除了]、-、^, 这几个可以用\转义)

 

匹配模式

re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变‘^‘和‘$‘的行为(参见上图)
S(DOTALL): 点任意匹配模式,改变‘.‘的行为(.可以跨行匹配)
L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

 

常用的正则表达式处理函数

1.re.search(pattern, string, flags=0)
re.search 函数会在字符串内查找模式匹配,直至找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

第一个参数:规则
第二个参数:表示要匹配的字符串
第三个参数:标致位,用于控制正则表达式的匹配方式

name="Hello,My name is kuangl,nice to meet you..."
k=re.search(rk(uan)gl,name)
if k:
printk.group(0),k.group(1)
else:
print"Sorry,not search!"
------------------------- 
kuangl uan

 

2.re.match(pattern, string, flags=0)
re.match 尝试从字符串的开始匹配一个模式,也等于说是匹配第一个单词

name="Hello,My name is kuangl,nice to meet you..."
k=re.match(r"(\H....)",name)
if k:
print k.group(0), k.group(1)
else:
print"Sorry,not match!"
--------------------------
Hello Hello

 

re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

3.re.findall(pattern, string, flags=0)
返回的结果是一个列表,建中存放的是符合规则的字符串,如果没有符合规则的字符串呗找到,就会返回一个空值。

mail=<[email protected]> <[email protected]> [email protected]
re.findall(r(\w+@mail.[a-z]{3}),mail)
----------------------------------------------------
[[email protected], [email protected], [email protected]]

 

4、re.sub(pattern, repl, string, count=0)
re.sub 用于替换字符串的匹配项
第一个参数:规则
第二个参数:替换后的字符串
第三个参数:字符串
第四个参数:替换个数。默认为0,表示每个匹配项都替换

test="Hi, nice to meet you where are you from?"
re.sub(r\s,-,test)
re.sub(r\s,-,test,5) 
---------------------------------------
Hi,-nice-to-meet-you-where-are-you-from?
Hi,-nice-to-meet-you-where are you from?

 

5.re.split(pattern, string, maxsplit=0)

test="Hi, nice to meet you where are you from?"
re.split(r"\s+",test)
re.split(r"\s+",test,3) 
--------------------------------------------------
[Hi,, nice, to, meet, you, where, are, you, from?]
[Hi,, nice, to, meet you where are you from?]

 

6.re.compile(pattern, flags=0)
可以把正则表达式编译成一个正则对象

pattern = re.compile(rhello)
match = pattern.match(hello world!)
print match.group()
-------------------------------------
hello

 

2015-05-09

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。