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

请教一个正则表达式的问题,如何匹配要么一对双引号,要么没有双引号,但不匹配只有一个引号的情况?

  •  
  •   ian19znj · 2021-04-15 19:23:13 +08:00 · 1048 次点击
    这是一个创建于 1347 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个问题可能对大佬来说很简单,但我想了很久没想明白,在此请教一下。

    问题简化成这样的模型:我有一些人名,这些人名可以用一对双引号包住,或者没有双引号,但不能只有一边有引号。

    https://regex101.com/r/v30Gob/1

    如链接所示,我想匹配 lilei 和 hanmeimei,而不匹配 lintao,因为 lintao 只有单边引号。 请问怎么做呢?

    先谢过哈。

    7 条回复    2021-04-16 21:00:15 +08:00
    0ZXYDDu796nVCFxq
        1
    0ZXYDDu796nVCFxq  
       2021-04-15 19:46:31 +08:00 via Android
    ("\w+"|\w+)
    0ZXYDDu796nVCFxq
        2
    0ZXYDDu796nVCFxq  
       2021-04-15 19:49:05 +08:00 via Android
    更正一下:
    ^("\w+"|\w+)$
    raaaaaar
        3
    raaaaaar  
       2021-04-15 22:37:08 +08:00 via Android
    写两个再或不行吗,就像楼上那样
    xml123
        4
    xml123  
       2021-04-16 09:26:01 +08:00
    ^("?)\w+\1$
    还是用楼上的方案吧
    ian19znj
        5
    ian19znj  
    OP
       2021-04-16 09:52:45 +08:00
    @gstqc #2
    谢谢,我想过用或,

    ^("(?<name>\w+)"|(?<name>\w+))$

    但是他会提示我 group name 不唯一。

    https://regex101.com/r/2HvO2X/1
    0ZXYDDu796nVCFxq
        6
    0ZXYDDu796nVCFxq  
       2021-04-16 10:04:52 +08:00   ❤️ 1
    @ian19znj 不能用两次 (?<name>)

    如果想赋值,可以把#4 的改一下
    ^("?)(?<name>\w+)\1$
    ("?) 表示匹配双引号,后面的\1 再匹配一次
    ian19znj
        7
    ian19znj  
    OP
       2021-04-16 21:00:15 +08:00
    @gstqc \1 再匹配一次真是完美解决了我的问题,太谢谢啦!!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2748 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:46 · PVG 22:46 · LAX 06:46 · JFK 09:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.