V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
northisland
V2EX  ›  正则表达式

来吧,各位正则达人们,来做道题帮我进步

  •  
  •   northisland · 2015-12-29 15:31:20 +08:00 · 2055 次点击
    这是一个创建于 3284 天前的主题,其中的信息可能已经有所发展或是发生改变。

    楼主的正则扔了好久不弄已经捡不起来了,只是记得貌似用正则表达式可以表示任意字符串,以便查找 /替换 /删除所需要的目标。

    那么我现在有这样的一个字符串:
    addr: "24330208"

    我想把冒号前后(不包含空格和引号)的两项提取出来,用正则应该怎么弄呢?
    语言不限。

    我用 python 写
    m=re.search('[ ]*( \ w * ) : [ \"] *( \ s * ) [ \"] *', ' addr: "24330208"')
    m.group()
    请问问题在哪里?

    谢了

    9 条回复    2015-12-29 17:34:39 +08:00
    whosesmile
        1
    whosesmile  
       2015-12-29 15:36:24 +08:00   ❤️ 1
    1.这么简单的东西为什么要用正则? string.split 不行吗?
    2.好吧,还是写个给你(js):/(addr):\s*\"(\d+)\"/.exec('addr: "24330208"')
    feiyuanqiu
        2
    feiyuanqiu  
       2015-12-29 15:41:22 +08:00   ❤️ 1
    var s = 'addr: "24330208"', r = /(\w+):\s*"(\w+)"/;
    s.match(r);
    northisland
        3
    northisland  
    OP
       2015-12-29 15:46:51 +08:00
    其实前后两段,空格数量,有无引号是不一定的

    m=re.search('(.*):(.*)', ' addr: "24330208"')
    if m:
    print m.group(1).replace('"','').strip(), group(2).replace('"','').strip()
    是可行的
    但是我想看看有没有不把结果去引号、空格的做法
    zwhu
        4
    zwhu  
       2015-12-29 16:02:38 +08:00   ❤️ 1
    /(\w+):\s*(?:(?:"(.+?)")|(.+))/

    这样应该能满足
    sennes
        5
    sennes  
       2015-12-29 16:09:46 +08:00   ❤️ 2
    http://regexper.com/
    把正则丢进去图示一下,就知道怎么修改和补充条件了。
    gimp
        6
    gimp  
       2015-12-29 16:25:11 +08:00   ❤️ 1
    hqs123
        7
    hqs123  
       2015-12-29 16:46:34 +08:00   ❤️ 1
    不懂,但来学习下...
    chemzqm
        8
    chemzqm  
       2015-12-29 17:20:01 +08:00   ❤️ 1
    vim:
    let list= matchlist('addr: "343423"', '\v^(\w+)\s*:\s*"(.*)"')
    echo list[1]
    echo list[2]

    javascript
    var ms = 'addr: "424344"'.match(/^(\w+)\s*:\s*"(.*)"/)
    console.log(ms[1])
    console.log(ms[2])

    python
    import re
    m = re.search('^(\w+)\s*:\s*"(.*)"','abbr: "42414"')
    m.group(1)
    m.group(2)

    贪婪匹配版本
    DejaVud
        9
    DejaVud  
       2015-12-29 17:34:39 +08:00   ❤️ 1
    楼主问了他写的正则问题在哪,所以我来试回答下
    1.用 raw string, r"[]*(\w*):[\"]*(\s*)[\"]*",否则'\'会导致转置
    2.\s 不是用来匹配数字
    再试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5223 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:48 · PVG 11:48 · LAX 19:48 · JFK 22:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.