首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

如何用正则表达式匹配第二个引号里的内容?

  •  
  •   guxianbang · 145 天前 · 1453 次点击
    这是一个创建于 145 天前的主题,其中的信息可能已经有所发展或是发生改变。

    当一个句子中有多对引号的时候,例如:

    Last "week" I "went" to the "theatre"

    正则表达式"[^"]+"只能匹配最后一个引号里的内容:theatre

    我想匹配第二个引号里的内容( went ),该怎么写规则呢?

    18 回复  |  直到 2019-06-20 17:01:20 +08:00
        1
    choury   145 天前 via Android
    多匹配点,然后别的不捕获
        2
    mooncakejs   145 天前
    'Last "week" I "went" to the "theatre"'.match(/"\w+"/g)
        3
    guxianbang   145 天前
    @mooncakejs 匹配不到
        4
    clarkyi   145 天前
    "\w+"$
        5
    clarkyi   145 天前
    @clarkyi 这一条也不行
        6
    mooncakejs   145 天前
    @guxianbang 这是全匹配出来,找最后一个就好了。
    只要最后一个就 'Last "week" I "went" to the "theatre"'.match(/"\w+"$/)
        7
    opticaline   145 天前

    ```
    var re = /"[^"]+"/g;
    var s = 'Last "week" I "went" to the "theatre"';
    var m;

    do {
    m = re.exec(s);
    if (m) {
    console.log(m[0]);
    }
    } while (m);
    ```
        8
    loryyang   145 天前
    re.match(r'[^"]*"[^"]*"[^"]*"([^"]*)".*', 'Last "week" I "went" to the "theatre"').group(1)
    得到 went
        9
    opticaline   145 天前
    @guxianbang 我觉得不是正则的问题,是你获取的不对
        10
    guxianbang   145 天前
    谢谢各位🙏,我研究一下
        11
    pkookp8   145 天前 via Android
    ^.*?".*?".*?"(.*?)"
    \1
        12
    ahaodady   145 天前
    解题问问,突然想到的一个问题
        13
    ahaodady   145 天前
    12345

    使用 \d{2}
    只能取到 12、34
    我怎么取 23、45 呢
        14
    ahaodady   145 天前
    顺便回答题主,你的正则会取出所有引号里的内容,如果确定是最后一项的话,在代码里取最后一条即可。

    如果是编辑器里的话,结尾带个$

    "([^"]+)"$
        15
    azh7138m   145 天前
    零宽断言?
    ^.*?(?<=".*?").*?"(.*?)"
    先匹配一个"",然后取后面这个""
        16
    zhzbql   145 天前
    js 解法
    /^.*?".*?".*?"(.*?)"/.exec('Last "week" I "went" to the "theatre"')[1]
    或 'Last "week" I "went" to the "theatre"'.match(/".*?"/g)[1]
        17
    hjq98765   145 天前
    @ahaodady 零宽断言

    以 python 为例:

    import re
    re.findall('(?=(\d{2}))','12345')
    # ['12', '23', '34', '45']
        18
    ismyyym   144 天前
    python:

    import re

    str='Last "week" I "went" to the "theatre"'

    x=re.search('^.*?".*?".*?"(.*?)"',str ).group(1) #正数第二个”“

    y=re.search('.*"(.*?)".*?".*?".*?$',str ).group(1) #倒数第二个”“

    z=re.findall('"(.*?)"',str)[1] # 返回所有”“,取第二个


    用对下面这些
    ^ $ *?
    开头 结尾 尽可能少
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3989 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 08:12 · PVG 16:12 · LAX 00:12 · JFK 03:12
    ♥ Do have faith in what you're doing.