V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
? 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 · 2021-02-23 13:09:53 +08:00 · 2384 次点击
    这是一个创建于 1172 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    原字符串:

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

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

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

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

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

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

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

    re.sub(r'\\\\', ', ', str) -> 'A\\B\\C, D, E'
    0clickjacking0
        6
    0clickjacking0  
       2021-02-23 16:28:55 +08:00
    楼主的意思是每一个\都要替换成逗号吗
    loli
        7
    loli  
       2021-02-23 17:39:28 +08:00
    为什么要加[]?
    后面没{}单纯一个[]有什么意义吗?
    imlinhanchao
        8
    imlinhanchao  
       2021-02-24 09:25:05 +08:00
    re.sub(r'\\+', ', ', str)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2543 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 16:05 · PVG 00:05 · LAX 09:05 · JFK 12:05
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com