Python | import re模块的使用

Python 对文字处理的能力有很多功能,除了 str 对象自带的一些方法外,就是正则表达式这个强大的模块了。

re模块是Python中处理正则表达式的模块,里面有一些python中常用的正则表达式处理函数。

re模块的主要方法

  1. re.compile: 编译一个正则表达式模式(pattern)
  2. re.match: 从头开始匹配, 使用group()方法可以获取第一个匹配值
  3. re.search: 用包含方式匹配,使用group()方法可以获取第一个匹配值
  4. re.findall: 用包含方式匹配,把所有匹配到的字符放到以列表中的元素返回多个匹配值
  5. re.sub: 匹配字符并替换
  6. re.split: 以匹配到的字符当做列表分隔符,返回列表
  7. 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 对象。结果中包含空匹配项。

posted @ 2023-02-25 21:43  张Zong在修行  阅读(899)  评论(0编辑  收藏  举报