• [python] 正则表达式细节


    1、零宽断言

    所谓零宽断言就是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置。

    正则表达式中有很多这样的断言,常见的如匹配字符串或者行的起始位置 ^ 和 /A,匹配字符串或者行的末尾 $ 和 /Z,单词边界/B等等。这些简单的就不说了,今天主要说一下界定的使用方法。

    表达式结构:

    (?=exp) 匹配exp前面的位置,即某表达式后面是exp
    (?<=exp) 匹配exp后面的位置,即某表达式前面是exp
    (?!exp)  匹配后面跟的不是exp的位置,即某表达式后面不是exp
    (?<!exp)  匹配前面不是exp的位置,即某表达式前面不是exp

    (?<=<(w+)>).*(?=</1>) 匹配不包含属性的简单HTML标签内里的内容。

    在Python3.7下测试:

    import re
    str = "(?<=<(w+)>).*(?=(</1>))"
    re = re.compile(str)
    

    error: look-behind requires fixed-width pattern

    错误说明:前向界定括号中的表达式必须是常值,也就是不可以在前向界定的括号里写正则式。

    建议:安装 regex 模块替代原有的 re,regex修正了re不少的bug,只要 import regex as re 就跟内置的re用法一样了

    2、反斜杠的问题

    与大多数编程语言相同,正则表达式里使用""作为转义字符,这就可能造成反斜杠困扰。

    假如你需要匹配文本中的字符"",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":

    第一个和第三个用于在编程语言里将第二个和第四个转义成反斜杠,

    转换成两个反斜杠\后再在正则表达式里转义成一个反斜杠用来匹配反斜杠。

    这样显然是非常麻烦的。

    Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\"表示。

    同样,匹配一个数字的"\d"可以写成r"d"。

    有了原生字符串,妈妈再也不用担心我的反斜杠问题~

  • 相关阅读:
    html更改弹窗样式(原创,转载需声明)
    关于考研的反思
    Android之控件学习
    Android之LinearLayout布局下怎么让按钮固定在底部
    Android中控件属性详细总结(转载)
    毕业设计周记(第四篇)
    毕业设计周记(第三篇)
    毕业设计周记(第二篇)
    毕业设计周记(第一篇)
    Hadoop
  • 原文地址:https://www.cnblogs.com/P3nguin/p/7521215.html
Copyright © 2020-2023  润新知