批量处理文本的时候,会经常要用到批量提取文本中想要的信息,或者某一行。利用python的re模块可以方便达到我们的目的
re模块的具体使用可以参考Python 正则表达式 | 菜鸟教程,本文章只介绍标题的功能如何实现。
比如从下面一行中要提取名字ftz
my name is ftz, who are you?
提取的语句如下:
>>> import re
>>>
>>> str = "my name is ftz, who are you?"
>>>
>>> name = re.findall(r"^my name is (.+?),",str)
>>>
>>> name
['ftz']
>>>
re.findall返回的是一个列表,如果没有匹配上则是一个空列表,如果有多个匹配,则返回的列表是多个匹配的结果
如果我们想从文本中提取出某一行,文本内容如下:
who are you?
my name is ftz
and you?
no name
ha ha
我们想提取出第二行
>>> import re
>>>
>>> f = open("./english.txt",encoding='utf-8')
>>> data = f.read()
>>> f
<_io.TextIOWrapper name='./english.txt' mode='r' encoding='utf-8'>
>>>
>>> sentence = re.findall(r"^my name.*",data,re.M)
>>> sentence
['my name is ftz']
>>>
上面的re.findall后面的参数中有个re.M,这个是多行模式,假如有两行my name开头的,则会匹配出两行,文本修改如下:
who are you?
my name is ftz
and you?
my name is zte
ha ha
匹配结果如下:
>>> f = open("./english.txt",encoding='utf-8')
>>> data = f.read()
>>> sentence = re.findall("^my name.*",data,re.M)
>>> sentence
['my name is ftz', 'my name is zte']
>>>
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志
-
- re.I 忽略大小写
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M 多行模式
- re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- re.X 为了增加可读性,忽略空格和 # 后面的注释
本文介绍如何使用Python的re模块进行文本批量处理,重点讲解如何通过正则表达式提取特定信息及匹配文本中的特定行。
1952

被折叠的 条评论
为什么被折叠?



