推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
miniyao
V2EX  ›  Python

Python 正则表达式,匹配连续反斜杠,应该是用 2 个\\,还是 4 个\\\\ 这样?

  •  
  •   miniyao · Feb 23, 2021 · 3776 views
    This topic created in 2048 days ago, the information mentioned may be changed or developed.

    原字符串:

    str = 'A\B\\C\\\D\\\\E'
    

    把原字符串中的反斜杠,全部改成逗号 ,

    out1 = re.sub(r'[\\]', ', ', str)
    out2 = re.sub(r'[\\\\]', ', ', str)
    

    out1 和 out2 输出结果是一样的,看到有不一样的用法,哪个是更规范的匹配方式?

    8 replies  •  2021-02-24 09:25:05 +08:00
    xuboying
        1
    xuboying  
       Feb 23, 2021
    正则语法方括号里重复多个的内容不是和写一个是一个意思么,这个和 python 没关系吧?
    no1xsyzy
        2
    no1xsyzy  
       Feb 23, 2021
    首先你要搞懂正则的语法
    然后你要搞懂正则没有 “更规范的匹配方式”

    在解释这个问题时,建议你拿个显示正则的 AST 的工具看一下。

    [\\] ~ (any-of \x1c)
    [\\\\] ~ (any-of \x1c \x1c)
    AV1
        3
    AV1  
       Feb 23, 2021   ❤️ 2
    正则语法方括号里的每个字符是独立的,比如[abc]匹配的是"a"、"b"、"c",而不是连续的"abc"字符串。所以,你在方括号里无论写几个\,它都是匹配一个\,意义都是一样的。
    julyclyde
        4
    julyclyde  
       Feb 23, 2021
    raw string 试试?就不需要 escape 了吧
    RIcter
        5
    RIcter  
       Feb 23, 2021
    [] 的问题,参见 #3

    re.sub(r'\\\\', ', ', str) -> 'A\\B\\C, D, E'
    0clickjacking0
        6
    0clickjacking0  
       Feb 23, 2021
    楼主的意思是每一个\都要替换成逗号吗
    loli
        7
    loli  
       Feb 23, 2021
    为什么要加[]?
    后面没{}单纯一个[]有什么意义吗?
    imlinhanchao
        8
    imlinhanchao  
       Feb 24, 2021
    re.sub(r'\\+', ', ', str)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2326 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 07:09 · PVG 15:09 · LAX 00:09 · JFK 03:09
    ♥ Do have faith in what you're doing.