字符串前面加r,是raw的意思,它表示对字符串不进行转义。
print “\bhi”
hiprint r”\bhi”
\bhi
字符 | 含义及用法 |
---|---|
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
| | 相当于or,它连接的两个表达式,只要满足其中之一,就会被算作匹配成功。 |
[] | 匹配满足括号中任一字符 |
. | 匹配除换行符以外的任意字符 |
[^a] | [a]的反义,表示除a以外的任意字符 |
[^abcd] | 匹配abcd以外的任意字符 |
\d | 匹配数字 |
[0-9] | 匹配数字 |
\s | 匹配任意的空白符 |
\w | 匹配字母或数字或下划线或汉字 |
\b | 匹配单词开头或结束的位置 |
\S | 匹配任意不是空白符的字符,其实是\s的反义 |
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
重复 | |
* | 字符重复任意长度包括0 |
+ | 字符重复1次或更长 |
{} | 大括号内写期望的字符重复次数 |
? | 重复零次或一次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
1.“\b”
“\b”在正则表达式中表示单词的开头或结尾,空格、标点、换行都算是单词的分割。而“\b”自身又不会匹配任何字符,它代表的只是一个位置。
使用“\bhi\b”这个正则表达式,找出‘hi’
使用“\bhi”,找出hi开头的字符串
2.[]
在正则表达式中,[]表示满足括号中任一字符
3.re模块
re.findall(r"hi", text)
re是python里的正则表达式模块。findall是其中一个方法,用来按照提供的正则表达式,去匹配文本中的所有符合条件的字符串。返回结果是一个包含所有匹配的list。
4.“.”和“\S”
“.”在正则表达式中表示除换行符以外的任意字符。
在这段文本中:Hi, I am Shirley Hilton. I am his wife.
如果我们用“i.”去匹配,就会得到[‘i,’, ‘ir’, ‘il’, ‘is’, ‘if’]
与“.”类似的一个符号是“\S”,它表示的是不是空白符的任意字符,注意是大写字符S。
5.“?”和"*"
在很多搜索中,会用“?”表示任意一个字符,”*”表示任意数量连续字符,这种被称为通配符。但在正则表达式中,任意字符是用“.”表示,而”*”则不是表示字符,而是表示数量:它表示前面的字符可以重复任意多次(包括0次),只要满足这样的条件,都会被表达式匹配上。
结合前面的“.*”,用“I.*e”去匹配,想一下会得到什么结果?
[‘I am Shirley Hilton. I am his wife’]
也许你会以为是[‘I am Shirle’, ‘I am his wife’]
这是因为“*”在匹配时,会匹配尽可能长的结果。如果你想让他匹配到最短的就停止,需要用“.*?”。如“I.*?e”,就会得到第二种结果。这种匹配方式被称为懒惰匹配,而原本尽可能长的方式被称为贪婪匹配。
6.匹配数字:如电话号码等
[0-9]* 或者\d* 表示任一长度的数字,类似的还有[a-zA-Z]的用法。
但要注意的是,*表示的任意长度包括0,也就是没有数字的空字符也会被匹配出来。
一个与*类似的符号+,表示的则是1个或更长。
所以要匹配出所有的数字串,应当用[0-9]+或者\d+
如果要限定长度,就用{}代替+,大括号里写上你想要的长度。比如11位的数字:\d{11}
想要再把第一位限定为1,就在前面加上1,后面去掉一位:1\d{10}
例子
Q:写一个匹配以下号码的正则表达式
(021)88776543
010-55667890
02584453362
0571 66345673
A:(?0\d{2,3}[) -]?\d{7,8}