\w
- 匹配字母或数字或下划线或汉字(3.x版本可以匹配汉字,但2.x版本不可以)
\s
- 匹配任意的空白符
\b
- 在正则表达式中表示单词的开头或结尾, 空格、标点、换行都算是单词的分割. 而“\b”自身又不会匹配任何字符, 它代表的只是一个位置.
\d
- 表示一个数字
^
- 匹配字符串的开始
$
- 匹配字符串的结束
[ ]
- 使用方括号,在正则表达式中, []表示满足括号中任一字符. 比如“[hi]”, 它就不是匹配“hi”了, 而是匹配“h”或者“i”.
\S
其实就是\s
的反义,任意不是空白符的字符。同理,还有:
\W
- 匹配任意不是字母,数字,下划线,汉字的字符
\D
- 匹配任意非数字的字符
\B
- 匹配不是单词开头或结束的位置
[a]
的反义是[^a]
,表示除a以外的任意字符。[^abcd]
就是除abcd以外的任意字符。
*
、+
、{}
用来表示字符的重复。其他重复的方式还有:
*
- 表示任意数量连续字符,这种被称为通配符。但是在正则表达式中,’*’只表示数量,不表示字符.
+
- 与’*’类似,表示1或更多的数量
?
- 表示任意一个字符, 重复零次或一次
{}
- 代替’+’,表示特定数量,限定长度
{n,}
- 重复n次或更多次
{n,m}
- 重复n到m次
正则表达式不只是用来从一大段文字中抓取信息,很多时候也被用来判断输入的文本是否符合规范,或进行分类。来点例子看看:
^\w{4,12}$
这个表示一段4到12位的字符,包括字母或数字或下划线或汉字,可以用来作为用户注册时检测用户名的规则。(但汉字在python2.x里面可能会有问题)
\d{15,18}
表示15到18位的数字,可以用来检测身份证号码
^1\d*x?
以1开头的一串数字,数字结尾有字母x,也可以没有。有的话就带上x。
另外再说一下之前提到的转义字符\
。如果我们确实要匹配.
或者*
字符本身,而不是要它们所代表的元字符,那就需要用\.
或\*
。\
本身也需要用\\
。
比如"\d+\.\d+"
可以匹配出123.456这样的结果。
\bs\S*?e\b
从下面一段文本中,匹配出所有s开头,e结尾的单词。
site sea sue sweet see case sse ssee loses
r
,是raw的意思,它表示对字符串不进行转义。为什么要加这个?你可以试试print "\bhi"
和r"\bhi"
的区别。
>>> print “\bhi” hi >>> print r”\bhi” \bhi