推荐学习书目
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 · 3486 views
    This topic created in 1928 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   ·   Solana   ·   5582 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 06:32 · PVG 14:32 · LAX 23:32 · JFK 02:32
    ♥ Do have faith in what you're doing.