V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Seymer
V2EX  ›  问与答

如何用正则表达式匹配到所有双引号内的逗号?

  •  
  •   Seymer · 2017-07-20 17:31:21 +08:00 · 5993 次点击
    这是一个创建于 2710 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数据形如: 我们希望 V2EX 能够成为"中文,世界"中氛围最好的社区,而实现这个目标,"需要,我们"所有人的共同努力:友善,公平,尊重知识和事实。

    1. 中文,世界 内的逗号;
    2. 需要,我们 内的逗号;
    3. 。。。
    10 条回复    2017-07-21 14:57:08 +08:00
    yunkchen
        1
    yunkchen  
       2017-07-20 17:35:22 +08:00   ❤️ 1
    r"\".*?(,).*?\""

    是要这样?
    AJian
        2
    AJian  
       2017-07-20 17:39:32 +08:00   ❤️ 1
    \".*?(,).*?\"
    AJian
        3
    AJian  
       2017-07-20 17:40:21 +08:00   ❤️ 1
    ArcticL
        4
    ArcticL  
       2017-07-20 17:52:39 +08:00
    @AJian 请问(.*)?和(.*?) 有什么区别? 匹配的结果是不一样的
    AJian
        5
    AJian  
       2017-07-20 18:02:24 +08:00
    一个是贪婪匹配一个是懒惰匹配,https://deerchao.net/tutorials/regex/regex.htm#greedyandlazy
    geelaw
        6
    geelaw  
       2017-07-20 18:50:13 +08:00 via iPhone
    那么,双引号不配对的情况呢?
    geelaw
        7
    geelaw  
       2017-07-20 18:51:16 +08:00 via iPhone
    @yunkchen
    @AJian

    "你好"是一句话,"你好吗"是另一句
    geelaw
        8
    geelaw  
       2017-07-20 18:53:33 +08:00 via iPhone
    一个简单的想法是:首先零宽断言,要求前缀从字符串开头开始,且具有恰好奇数个双引号;然后进入正文匹配一个逗号。

    但是在引号不配对的时候这个问题不良定义。
    ptrees
        9
    ptrees  
       2017-07-21 13:04:19 +08:00
    @ArcticL 两个 ? 的意思都不一样,前者表示 0 或 1,后者表示非贪婪匹配
    ArcticL
        10
    ArcticL  
       2017-07-21 14:57:08 +08:00
    @ptrees 清楚了,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   998 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:04 · PVG 04:04 · LAX 12:04 · JFK 15:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.