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

请教前辈们一个正则表达式

  •  
  •   Yukee798 · 2021-06-02 09:07:26 +08:00 · 2103 次点击
    这是一个创建于 1304 天前的主题,其中的信息可能已经有所发展或是发生改变。

    验证输入的字符串,类似如下结构

    [4,10,12,#,10]
    

    要求里面的元素可以是 #,也可以是数字,如果是数字的话取值范围必须在 [3,37] 范围内。 对正则不是很熟悉,查了半天也没写出来。

    15 条回复    2021-06-02 19:31:12 +08:00
    xiangyuecn
        1
    xiangyuecn  
       2021-06-02 09:25:30 +08:00   ❤️ 1
    不要为难正则表达式了😂 split+一个循环 比写一个巨型正则更快 人类更容易理解
    TomVista
        2
    TomVista  
       2021-06-02 09:27:38 +08:00   ❤️ 1
    \[(((#|[3-9]|[1-2][0-9]|3[0-7]),)*)(#|[3-9]|[1-2][0-9]|3[0-7])\]

    不建议用正则,用字符串操作吧
    TomVista
        3
    TomVista  
       2021-06-02 09:29:05 +08:00
    @TomVista 这个正则没有限制开头和结尾,你自己加一下,$^,
    0ZXYDDu796nVCFxq
        4
    0ZXYDDu796nVCFxq  
       2021-06-02 09:31:25 +08:00 via Android   ❤️ 1
    \[\d+,{3}(#|[3-9]|[1-2]\d|3[0-7]),\d+\]

    你这规则不明确
    是说要求一个类似数组格式的字符串,5 个元素,第 4 个为#或 3-37,其余必须为数字?
    逗号前后的空格是否允许?
    oaix
        5
    oaix  
       2021-06-02 09:34:21 +08:00   ❤️ 1
    ^\[(?:|(?:[3-9]|[12][0-9]|3[0-7]|#)(?:,(?:[3-9]|[12][0-9]|3[0-7]|#))*)\]$

    如果需要匹配空的[],可以用这个
    hafuhafu
        6
    hafuhafu  
       2021-06-02 09:36:40 +08:00   ❤️ 1
    只会这种写法...
    ```
    \[(([4-9]|3[0-7]?|[1-2]\d|#),)+([4-9]|3[0-7]?|[1-2]\d|#)\]
    ```
    lujie2012
        7
    lujie2012  
       2021-06-02 09:48:15 +08:00   ❤️ 1
    $^\[([0~9,#]){0, 70}\]$^

    表达式很难写,因为你是规律的 xx, xxx, xx, 你不如直接切割变成 list 然后遍历其中的元素。这样的规范表达式不如写函数方法。我上面的写的是希望你理解一下,推荐你买一本 正则表达式书籍,系统的学习一下,不难,很简单。绿皮的那本书
    emric
        8
    emric  
       2021-06-02 09:52:03 +08:00   ❤️ 1
    我猜楼主想要的是这个:
    \[((#|[3-9]|[1-2][0-9]|3[0-7]),?)*\]
    TomatoYuyuko
        9
    TomatoYuyuko  
       2021-06-02 09:56:58 +08:00
    split 写快多了,能不用正则就不要用,数组操作多爽啊
    balabalaguguji
        10
    balabalaguguji  
       2021-06-02 09:59:16 +08:00
    用工具测试下就好啦 https://tools.fun/regexp.html
    luckyrayyy
        11
    luckyrayyy  
       2021-06-02 10:15:35 +08:00   ❤️ 3
    当你想用正则解决一个问题,那么你就有了两个问题。
    shyangs
        12
    shyangs  
       2021-06-02 10:34:15 +08:00
    如果你有一個問題,想用正則表達式來解決,那麼你就有兩個問題了。
    ungrown
        13
    ungrown  
       2021-06-02 13:29:59 +08:00
    正则是个好东西,但是别啥都用正则,你把字符串掐头去尾再分隔开来处理,不是轻松愉快吗?
    一个复杂的正则匹配难道运行效率就不低了?
    BeautifulSoap
        14
    BeautifulSoap  
       2021-06-02 13:43:08 +08:00 via Android
    那啥,正则性能挺差的,尤其你这种奇怪的需求,能不同正则就别用
    xiangchen2011
        15
    xiangchen2011  
       2021-06-02 19:31:12 +08:00
    @shyangs 这话说得对
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5476 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:07 · PVG 16:07 · LAX 00:07 · JFK 03:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.