美文网首页
2018-09-05 scrapy 分支re正则表达式

2018-09-05 scrapy 分支re正则表达式

作者: 认真的史莱冰 | 来源:发表于2018-09-06 16:32 被阅读0次

    正则表达式再学习(这里说的是re模块)

    因为在python中,想 \ 代表转义字符的前缀所以 \\ 在python中== \,这时候我们就有我们

    原始字符串登场了,原始字符串中\不在被视为一个特殊的字符,所以在正则表达式中强烈推荐使用

    原始字符串和一般的字符串唯一的区别在于,他的所有\都是经过转义的 就是 \ == \\

    特殊字符

    \d  表示任何十进制数字  0-9              类[0-9]

    \D  与\d相反,匹配任何非十进制数字的字符 相当于类[^0-9]

    \s  匹配任何空白字符(空格,换行符,制表符tab) 类[\t\n\t\f\v]

    \S  匹配任何非空白字符      类[^\t\n\r\f\v]

    \w  匹配任何单词字符

    \W 匹配任何费单词字符

    \b  匹配单词的开始或结束

    \B  与\B相反

    .    元字符,他匹配出了换行符之外的所有字符

    *    元字符,他用于指定前一个字符匹配零次或者任意次 == {0,}

    +  元字符,它用于指定前一个字符匹配一次或者任意次 =={1,}

    ?  元字符,它用于指定前一个字符匹配一次或者零次 == {0,1}

    {}  元字符,  上面几个元字符都可以使用他来表达,他的含义是,前一个字符必须匹配{m,n} m次到n次

    ^  元字符匹配字符串起始的位置比如,re.search('^From','From Here to Eternity') (那么问题就来了,为什么我不直接用match呢)

        设置了MULLINE标签,他会匹配每一行的开始

    $  元字符,匹配字符创结束的位置print(re.search('}$', '{block}')) ,如果最后不是以}结尾的将返回None

    \A  在没有设置标签的时候 == ^,设置标签后还是匹配首字母

    \Z  只匹配字符串结束的位置==$

    |    就是很普通的或你懂得

    \b  零宽断言,就是在\b的位置,你必须是空白字符,才能算你匹配成功(基本是这样)

    如何运用re模块,首先我们生成一个compile对象

    \B  就是\b的另一面,必须是非空白字符

    import re

    p = re.compile('[a-z]+')

    现在p就代表一个规则。他自带了四个方法去匹配字符串

    match()  从首字母开始匹配,如果string包含了规则中的字符串就代表匹配成功,匹配成功会返回一个

    对象    <_sre.SRE_Match object; span=(0, 3), match='add'>,注意,是从首字母开始匹配!!不成功就返回None

    而且注意,这个span的3是最后一个匹配到字符的后一位

    search()就在整个字符串里找找到就返回一个<_sre.SRE_Match object; span=(0, 3), match='add'>对象,找不到

    返回None,如果有多个能够被匹配到的字符串,那么只返回第一个

    findall() 在字符串中寻找所有的符合条件的字符串,找到了就返回一个列表,注意,这里面的都是字符串形式的['qwe','weq']酱婶儿的

    findliter()  在字符串中寻找所有符合条件的字符串,找到了就返回一个迭代器,里面全是<_sre.SRE_Match object; span=(0, 3), match='add'>对象

    说一下<_sre.SRE_Match object; span=(0, 3), match='add'>这种类型的对象叫做匹配对象‘

    说明一下匹配对象自带的查看自身信息的函数

    obj.group()返回匹配的字符串

    obj.strat()返回匹配开始的位置

    obj.end() 返回匹配结束的位置

    obj.span()返回一个元组表示匹配的位置(开始,结束)

    re.compile()对象不一定要创建,的看你的这个规则使用的次数多不多,如果你频繁的使用这个规则

    还是创建一个对象,节省空间,提高效率,如果用的不多,match findall finditer search sub这些

    也都是全局函数,两个参数,前者为规则,后者为待匹配的字符串

    编译标志

    A:

    使得 \w,\W,\b,\B,\s 和 \S 只匹配 ASCII 字符,而不匹配完整的 Un

    icode 字符。这个标志仅对 Unicode 模式有意义,并忽略字节模式

    S

    DOTALL

    使得 . 可以匹配任何字符,包括换行符。如果不使用这个标志,. 将匹配除了换行符的所有字符。

    I

    IGNORECASE

    字符类和文本字符串在匹配的时候不区分大小写。举个例子,正则表达式 [A-Z]

    也将会匹配对应的小写字母,像 FishC 可以匹配 FishC,fishc 或 FISHC 等。如果你不设置

    LOCALE,则不会考虑语言(区域)设置这方面的大小写问题。

    L

    LOCALE

    使得 \w,\W,\b 和 \B 依赖当前的语言(区域)环境,而不是 Unicode 数据库。

    区域设置是 C 语言的一个功能,主要作用是消除不同语言之间的差异。例如你正在处理的是法

    文文本,你想使用 \w+ 来匹配单词,但是 \w 只是匹配 [A-Za-z] 中的单词,并不会匹配 'é' 或

    'ç'。如果你的系统正确的设置了法语区域环境,那么 C 语言的函数就会告诉程序 'é' 或 '

    ç' 也应该被认为是一个字符。当编译正则表达式的时候设置了 LOCALE 的标志,\w+ 就

    可以识别法文了,但速度多少会受到影响。

    M

    MULTILINE

    (^ 和 $ 我们还没有提到,别着急,后边我们有细讲...)

    通常 ^ 只匹配字符串的开头,而 $ 则匹配字符串的结尾。当这个标志被设置的时候,^ 不仅匹配字符串的开头,还匹配每一行的行首;& 不仅匹配字符串的结尾,还匹配每一行的行尾。

    X

    VERBOSE

    这个标志使你的正则表达式可以写得更好看和更有条理,因

    为使用了这个标志,空格会被忽略(除了出现在字符类中和使用反斜杠

    转义的空格);这个标志同时允许你在正则表达式字符串中使用注释,#

    符号后边的内容是注释,不会递交给匹配引擎(除了出现在字符类中和使

    用反斜杠转义的 #)。

    分组的概念

    (ab)*表示的是,ab的多次出现,而且分组的概念之后会有子组的概念,先不展开

    相关文章

      网友评论

          本文标题:2018-09-05 scrapy 分支re正则表达式

          本文链接:https://www.haomeiwen.com/subject/qgpzwftx.html