推荐学习书目
› 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 · 3864 views
    This topic created in 2079 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
    xuboying
    Feb 23, 2021
    1
    正则语法方括号里重复多个的内容不是和写一个是一个意思么,这个和 python 没关系吧?
    no1xsyzy
    no1xsyzy
    Feb 23, 2021
    2
    首先你要搞懂正则的语法
    然后你要搞懂正则没有 “更规范的匹配方式”

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

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

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