Python 对文字处理的能力有很多功能,除了 str 对象自带的一些方法外,就是正则表达式这个强大的模块了。
re模块是Python中处理正则表达式的模块,里面有一些python中常用的正则表达式处理函数。
re模块的主要方法
- re.compile: 编译一个正则表达式模式(pattern)
- re.match: 从头开始匹配, 使用group()方法可以获取第一个匹配值
- re.search: 用包含方式匹配,使用group()方法可以获取第一个匹配值
- re.findall: 用包含方式匹配,把所有匹配到的字符放到以列表中的元素返回多个匹配值
- re.sub: 匹配字符并替换
- re.split: 以匹配到的字符当做列表分隔符,返回列表
- re.finditer:找到re匹配的所有子串,并把它们作为一个迭代器返回。
Python正则表达式符号意义
模式 | 描述 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾。 |
. | 匹配任意字符,除了换行符。 |
[] | 表示范围,匹配位于[]中的任意一个字符 |
[...] | 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k' |
[^...] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
* | 匹配0个或多个的表达式。 |
+ | 匹配1个或多个的表达式。 |
- | 在[]之内用来表示范围 |
| | 匹配位于|之前或之后的字符 |
? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
精确匹配 n 个前面表达式。例如, o{2} 能匹配 "food" 中的两个 o。 | |
匹配 n 个前面表达式。例如, o{2,} 能匹配 "foooood"中的所有 o。"o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。 | |
匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 | |
a| b | 匹配a或b |
() | 匹配括号内的表达式,也表示一个组。将位于()内的内容作为一个整体来对待 |
\ | 表示位于\之后的为转义字符 |
\w | 匹配字母数字及下划线还有语言 |
---|---|
\W | 匹配非字母数字及下划线 |
\s | 匹配任意空白字符,等价于 [\t\n\r\f]. |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于 [0-9]. |
\D | 匹配任意非数字 |
\A | 匹配字符串开始 |
\Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。 |
\z | 匹配字符串结束 |
re常用方法介绍
1、re.compile,包含两个参数,第一个参数pattern,第二个可选参数[flags]。
compile(pattern, flags=0)
编译正则表达式pattern,返回一个pattern对象。
pattern : 一个字符串形式的正则表达式
flags:
-
re.I 忽略大小写
-
re.M 多行模式
-
re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
也可以同时使用两个flags: re.I | re.M
2、re.match,match() 函数只检查 RE 是否在字符串开始处匹配,只报告一次成功的匹配,它将从 0 处开始;如果匹配不是从 0 开始的,match() 将不会报告它。
match(pattern, string, flags=0)
尝试在字符串的开头应用pattern,返回 Match 对象,如果找不到匹配,则选择“None”。
3、re.search,search() 则是扫描整个字符串,并报告它找到的第一个匹配。
search(pattern, string, flags=0)
扫描字符串以查找与pattern的匹配项,返回 Match 对象,如果找不到匹配,则选择“None ”。
4、re.findall,以列表形式返回所有匹配的字符串。re.findall可以获取字符串中所有匹配的字符串。
例:获取字符串中,包含’oo’的所有单词。
import re
text = "JGood is a handsome boy,he is handsome and cool,clever,and so on ...."
print re.findall(r'\w*oo\w*',text) #结果:['JGood', 'cool']
print re.findall(r'(\w)*oo(\w)*',text) # ()表示子表达式 结果:[('G', 'd'), ('c', 'l')]
5、re.sub,替换所有的匹配项,返回一个替换后的字符串,如果匹配失败,返回原字符串
例:将字符串中的空格 ’ ’ 替换成 ‘-’ :
import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
print(re.sub(r'\s+', '-', text))
运行结果:
JGood-is-a-handsome-boy,-he-is-cool,-clever,-and-so-on...
6、re.split,以列表形式返回分割的字符串。可以使用re.split来分割字符串,如:re.split(r’\s+’, text);将字符串按空格分割成一个单词列表。
函数原型:
split(string [, maxsplit = 0])
你可以通过设置 maxsplit 值来限制分片数。当 maxsplit 非零时,最多只能有 maxsplit 个分片,字符串的其余部分被做为列表的最后部分返回。
例:定界符可以是非数字字母字符的任意序列
#!python
p = re.compile(r'\W+')
p.split('This is a test, short and sweet, of split().')
['This', 'is', 'a', 'test', 'short', 'and', 'sweet', 'of', 'split', '']
p.split('This is a test, short and sweet, of split().', 3)
['This', 'is', 'a', 'test, short and sweet, of split().']
7、re.finditer
finditer(pattern, string, flags=0)
返回字符串中所有非重叠匹配项的迭代器。对于每个匹配,迭代器返回一个 Match 对象。结果中包含空匹配项。
标签:字符,匹配,Python,pattern,re,split,字符串,import From: https://www.cnblogs.com/zhangxuegold/p/17155499.html