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

请教这个正则表达式应该如何实现(可能存在)

  •  
  •   uti6770werty · 2020-02-12 15:40:29 +08:00 · 1619 次点击
    这是一个创建于 1751 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如下字符:

    $12-16$
    $  88-99$
    $ 12-67  $
    $9-0]$
    

    我写的这个正则:

    \$\d+.*-\d+.*$
    

    只能匹配
    $12-16$
    $9-0]$

    最终目的是想匹配两个$号之间的内容(包括$本身),
    但有些比较特殊,开始$之后,也许可能存在空白,如:$ 88-99$,
    结束的$之前,也许也有空白,如:$ 12-67 $
    这种有空白的“或许”的正则,写不出来,麻烦各位高手赐教,谢谢!

    10 条回复    2020-02-13 00:47:55 +08:00
    daquandiao2
        1
    daquandiao2  
       2020-02-12 15:49:02 +08:00
    \$\s*\d+-\d+.*\$
    asionbo
        2
    asionbo  
       2020-02-12 15:49:32 +08:00
    这样的?
    \$.*\$
    Hyseen
        3
    Hyseen  
       2020-02-12 15:50:28 +08:00
    \$.*\$
    b1iy
        4
    b1iy  
       2020-02-12 16:05:19 +08:00
    不是很确定你完整的需求。\s 是匹配空格,\S 是匹配非空格,不确定空格数量就可以 \s* ,你自己推导下
    具体参考 https://deerchao.cn/tutorials/regex/regex.htm 实现
    uti6770werty
        5
    uti6770werty  
    OP
       2020-02-12 16:13:21 +08:00
    谢谢各位~

    "\$.*\$" 的方式比较粗暴,会误匹配(像:$测试文字$),所以我才需要增加\d 和匹配有“-”符号来降低误匹配的可能性

    @b1iy \s*也不适合,有情况是:没有空格,如上面的$12-16$,这个是紧凑型了

    就是有\s*或者没有\s,两种情况都要兼顾。。。
    uti6770werty
        6
    uti6770werty  
    OP
       2020-02-12 18:02:50 +08:00
    或的关系,按教学网页,应该是|符号
    尽管我试过用
    \$[\s*|]\d+.*-\d+.*$
    \$(\s*|)\d+.*-\d+.*$
    始终不成。。。
    eason1874
        7
    eason1874  
       2020-02-12 18:19:33 +08:00
    你这长篇大论都没说到关键点,我看你帖子描述跟上面回复一样,误以为你匹配$$之间所有内容,看你回复才发现你要匹配的不包括中文。

    你应该说明$$可能有什么内容,允许什么内容,不允许什么内容,要匹配什么内容。给你几个例子:

    一、$$之间包括空格、数字: /\$(?:\s|[0-9])+\$/
    二、$$之间包括空格、-、数字: /\$(?:\s|\-|[0-9])+\$/
    三、$$之间包括空格、-、]、数字: /\$(?:\s|\-|\]|[0-9])+\$/

    自己举一反三吧。
    lysS
        8
    lysS  
       2020-02-12 18:52:23 +08:00 via Android
    禁用贪婪
    mxalbert1996
        9
    mxalbert1996  
       2020-02-13 00:41:58 +08:00 via Android
    你连你到底相匹配什么都不说清楚让我们猜呢?
    mxalbert1996
        10
    mxalbert1996  
       2020-02-13 00:47:55 +08:00 via Android
    提示一下,匹配任意数量(包括 0 )空白字符用 \s* 就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1332 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:50 · PVG 01:50 · LAX 09:50 · JFK 12:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.