赞
踩
批量处理文本的时候,会经常要用到批量提取文本中想要的信息,或者某一行。利用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 标志
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。