常用正则表达式方法:
- pattern.match(从头找一个)
- pattern.search(找一个)
- pattern.findall(找所有)
常用字符
- “.”号不能匹配"/n", 在re.DOTALL 时可以匹配换行符
>>> import re
>>> re.findall(".","\n")
[]
>>> re.findall(".","\n", re.DOTALL)
['\n']
##re.S 等同与 re.DOTALL
>>> re.findall(".","\n", re.S)
['\n']
- “” 转义符号用途
>>> re.findall('\.', '.')
['.']
- 贪婪/ 非贪婪
- 贪婪的意思是匹配尽可能多的结果, 是指匹配到不能匹配为止
- 非贪婪的意思是匹配就OK
- 加“?”是非贪婪,不加是贪婪
需要注意的是 “.”号默认情况下不能匹配 "\n"
pattern.sub(替换)
In [8]: b = "chuan1zhi2"
In [9]: re.sub("\d","",b)
Out[9]: 'chuanzhi'
In [10]:
re.compile(编译)方法
提高正则表达式的效率
In [10]: re.compile("\d")
Out[10]: re.compile(r'\d', re.UNICODE)
In [11]: p = re.compile("\d")
In [12]: p.findall(b)
Out[12]: ['1', '2']
In [13]: p.sub("_", b)
Out[13]: 'chuan_zhi_'
python中原始字符串问题
In [16]: r"a\nb" == "a\nb"
Out[16]: False
In [17]: r"a\nb" == "a\\nb"
Out[17]: True
In [19]: re.findall(r"a\nb","a\nb")
Out[19]: ['a\nb']
In [20]: re.findall(r"a\nb","a\\nb")
Out[20]: []
In [22]: re.findall("a\nb","a\nb")
Out[22]: ['a\nb']
windows下不使用原始字符串会出现问题
正则表达式忽略了r的影响
正则使用的注意点
- re.findall(“a(.*?)b”,“str”), 返回括号里面的内容。括号起到一个分组的作用,能够返回括号中的内容。括号前后的内容起到定位和过滤的效果
- 原始字符串r, 待匹配字符串中有反斜杠的时候,使用r能够忽视反斜杠的效果
- 点号默认情况匹配不到’\n’
\s
能够匹配空白字符,不仅仅包含空格,还有’\t|\r\n’