zoukankan      html  css  js  c++  java
  • 第11.13节 Python正则表达式的转义符””功能介绍

    为了支持特殊元字符在特定场景下能表示自身而不会被当成元字符进行匹配出来,可以通过字符集或转义符表示方法来表示,字符集表示方法前面在《第11.4节 Python正则表达式搜索字符集匹配功能及元字符”[]”介绍》进行了介绍,本节介绍转义符表示方法。

    在re模块中,为了让元字符能表示自身,可以在元字符前面增加转义符反斜杠“”,这个转义符的使用可以看到与Python字符串的转义符是完全相同的。re模块转义符和Python字符串转义符相同会导致在re模块进行转义处理时变得比较复杂,我们后面再单独章节讨论这个问题。

    举例:我们要查找字符串中包含3个以上星号的字符串:

    >>> re.search('*{3,100}','***************') #在匹配模式中星号未进行转义
    Traceback (most recent call last):
      File "<pyshell#30>", line 1, in <module>
        re.search('*{3,100}','***************')
      File "C:Program FilesPython37lib
    e.py", line 183, in search
        return _compile(pattern, flags).search(string)
      File "C:Program FilesPython37lib
    e.py", line 286, in _compile
        p = sre_compile.compile(pattern, flags)
      File "C:Program FilesPython37libsre_compile.py", line 764, in compile
        p = sre_parse.parse(p, flags)
      File "C:Program FilesPython37libsre_parse.py", line 930, in parse
        p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0)
      File "C:Program FilesPython37libsre_parse.py", line 426, in _parse_sub
        not nested and not items))
      File "C:Program FilesPython37libsre_parse.py", line 651, in _parse
        source.tell() - here + len(this))
    re.error: nothing to repeat at position 0
    >>> re.search('*{3,100}','***************') #对星号进行转义
    <re.Match object; span=(0, 15), match='***************'>
    >>>
    

    从以上案例可以看出,在匹配模式中的星号未进行转义时,由于星号在re模块中被作为重复0-n次的特殊修饰字符,在处理时由于前面没有修饰对象导致re模块分析报错。而增加转义符后,星号被作为自身处理,因此能正确匹配。

    注意:
    1、 所有元字符在匹配模式串中当要表示自身时需要加转义符反斜杠“”;
    2、 反斜杠自身需要表示自己时一样需要使用转义符。

    老猿Python,跟老猿学Python!
    博客地址:https://blog.csdn.net/LaoYuanPython

    请大家多多支持,点赞、评论和加关注!谢谢!

  • 相关阅读:
    【codeforces 785B】Anton and Classes
    【codeforces 785C】Anton and Fairy Tale
    【t003】string
    【BZOJ 1028】[JSOI2007]麻将
    【t011】最小覆盖子串
    【BZOJ 1029】[JSOI2007]建筑抢修
    cgb2008-京淘day02
    抽象类与接口概念及代码实例
    【hihocoder 1296】数论三·约瑟夫问题
    【hihocoder 1295】Eular质数筛法
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/13643633.html
Copyright © 2011-2022 走看看