Python正则表达式

来源:互联网 发布:mac删除launchpad图标 编辑:程序博客网 时间:2024/06/07 13:31

1、首先说一种最简单的正则表达式,它没有特殊的符号,只有基本的字母或数字。它满足的匹配规则就是完全匹配。

import retext = "Hi, I am Shirley Hilton. I am his wife."m = re.findall(r"hi", text)if m:    print melse:    print "not match"
以上代码为截取"Hi, I am Shirley Hilton. I am his wife."中的hi字符串,截取默认有大小写之分。


2、如果我们只想找到“hi”这个单词,而不把包含它的单词也算在内,那就可以使用“\bhi\b”这个正则表达式。

比如1中的字符串,如果设置\bhi,那就会匹配到一个hi。


3、最后再说一下[]这个符号。在正则表达式中,[]表示满足括号中任一字符。比如“[hi]”,它就不是匹配“hi”了,而是匹配“h”或者“i”。比如上述字符串设置规则[Hh]i,那就既能匹配Hi也能匹配hi了。


4、r"hi"这里字符串前面加了r,是raw的意思,它表示对字符串不进行转义。为什么要加这个?看看print "\bhi"和r"\bhi"的区别。
>>> print "\bhi"
hi
>>> print r"\bhi"
\bhi
可以看到,不加r的话,\b就没有了。因为python的字符串碰到“\”就会转义它后面的字符。如果你想在字符串里打“\”,则必须要打“\\”。
>>> print "\\bhi"
\bhi
这样的话,我们的正则表达式里就会多出很多“\”,让本来就已经复杂的字符串混乱得像五仁月饼一般。但加上了“r”,就表示不要去转义字符串中的任何字符,保持它的原样。


5、“.”在正则表达式中表示除换行符以外的任意字符。在1中的字符串:
Hi, I am Shirley Hilton. I am his wife.
如果我们用“i.”去匹配,就会得到
['i,', 'ir', 'il', 'is', 'if']
也可以直接用“.”去匹配,看看会得到什么。
与“.”类似的一个符号是“\S”,它表示的是不是空白符的任意字符。注意是大写字符S。


6、在很多搜索中,会用“?”表示任意一个字符,“*”表示任意数量连续字符,这种被称为通配符。但在正则表达式中,任意字符是用“.”表示,而“*”则不是表示字符,而是表示数量:它表示前面的字符可以重复任意多次(包括0次),只要满足这样的条件,都会被表达式匹配上。
结合前面的“.*”,用“I.*e”去匹配会得到:['I am Shirley Hilton. I am his wife'];而不是:['I am Shirle', 'I am his wife'];
这是因为“*”在匹配时,会匹配尽可能长的结果。如果你想让他匹配到最短的就停止,需要用“.*?”。如“I.*?e”,就会得到第二种结果。这种匹配方式被称为懒惰匹配,而原本尽可能长的方式被称为贪婪匹配。