python利用re模块提取文本中目标字符串和行

        批量处理文本的时候,会经常要用到批量提取文本中想要的信息,或者某一行。利用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 标志

    1. re.I 忽略大小写
    2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    3. re.M 多行模式
    4. re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
    5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
    6. re.X 为了增加可读性,忽略空格和 # 后面的注释

你可能感兴趣的:(Python,python,re,正则匹配字符串,正则匹配行)