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

迫于死活想不出来,请教一个正则表达式的问题

  •  
  •   danmaidesenling · 2020-03-05 10:29:43 +08:00 · 1635 次点击
    这是一个创建于 1758 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文: 11、大汶口文化中发现有四个与早期汉字结构相似的图形符号,这几个符号属于大汶口文化早期,距今约( )年至 5000 年 A 2000 B 3000 C 40000 D 4500 12、ddgdfgsdfg 期汉发

    我想用正则表达式 把 11 题 12 题 提取出来。

    我想到的 是 \d+、[\s\S]*(?=\d+、)

    但是的出来的结果是

    11、大汶口文化中发现有四个与早期汉字结构相似的图形符号,这几个符号属于大汶口文化早期,距今约( )年至 5000 年 A 2000 B 3000 C 40000 D 4500 1

    7 条回复    2020-03-05 13:52:54 +08:00
    ShundL
        1
    ShundL  
       2020-03-05 10:35:46 +08:00
    因为贪婪匹配,试试*后面加?
    keith1126
        2
    keith1126  
       2020-03-05 10:44:18 +08:00
    不是很懂正则,稍微改了改,似乎可以用:

    \d+、\s*.+?(?=\d+、|$)
    aureole999
        3
    aureole999  
       2020-03-05 10:57:23 +08:00
    \d+、[\s\S]*?(?=\d+、)
    danmaidesenling
        4
    danmaidesenling  
    OP
       2020-03-05 11:08:16 +08:00
    @ShundL @keith1126 @aureole999 非常感谢各位,确实存在贪婪的问题
    \d+、[\s\S]*?(?=\d+、) 这个可以用, 但是不能匹配最后一题。我改了下

    \d+、[\s\S]*?(?=\d+、)|\d+、[\s\S]*

    匹配的结果如下:
    group0:
    11、大汶口文化中发现有四个与早期汉字结构相似的图形符号,这几个符号属于大汶口文化早期,距今约( )年至 5000 年
    A 2000 B 3000 C 40000 D 4500

    group1:
    12、ddgdfgsdfg 期汉发

    希望能帮到其他人
    enlight
        5
    enlight  
       2020-03-05 13:39:04 +08:00
    什么语言?不同语言对正则支持度不一样
    enlight
        6
    enlight  
       2020-03-05 13:41:09 +08:00
    如果是 javascript,题主可以换个思路,比如 str.split(/\d+、/)
    danmaidesenling
        7
    danmaidesenling  
    OP
       2020-03-05 13:52:54 +08:00
    用的 java,java split 只有这个方法:String[] split(String regex, int limit)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4029 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 04:12 · PVG 12:12 · LAX 20:12 · JFK 23:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.