验证输入的字符串,类似如下结构
[4,10,12,#,10]
要求里面的元素可以是 #
,也可以是数字,如果是数字的话取值范围必须在 [3,37]
范围内。 对正则不是很熟悉,查了半天也没写出来。
![]() | 1 xiangyuecn 2021-06-02 09:25:30 +08:00 ![]() 不要为难正则表达式了 split+一个循环 比写一个巨型正则更快 人类更容易理解 |
![]() | 2 TomVista 2021-06-02 09:27:38 +08:00 ![]() \[(((#|[3-9]|[1-2][0-9]|3[0-7]),)*)(#|[3-9]|[1-2][0-9]|3[0-7])\] 不建议用正则,用字符串操作吧 |
4 0ZXYDDu796nVCFxq 2021-06-02 09:31:25 +08:00 via Android ![]() \[\d+,{3}(#|[3-9]|[1-2]\d|3[0-7]),\d+\] 你这规则不明确 是说要求一个类似数组格式的字符串,5 个元素,第 4 个为#或 3-37,其余必须为数字? 逗号前后的空格是否允许? |
![]() | 5 oaix 2021-06-02 09:34:21 +08:00 ![]() ^\[(?:|(?:[3-9]|[12][0-9]|3[0-7]|#)(?:,(?:[3-9]|[12][0-9]|3[0-7]|#))*)\]$ 如果需要匹配空的[],可以用这个 |
![]() | 6 hafuhafu 2021-06-02 09:36:40 +08:00 ![]() 只会这种写法... ``` \[(([4-9]|3[0-7]?|[1-2]\d|#),)+([4-9]|3[0-7]?|[1-2]\d|#)\] ``` |
![]() | 7 lujie2012 2021-06-02 09:48:15 +08:00 ![]() $^\[([0~9,#]){0, 70}\]$^ 表达式很难写,因为你是规律的 xx, xxx, xx, 你不如直接切割变成 list 然后遍历其中的元素。这样的规范表达式不如写函数方法。我上面的写的是希望你理解一下,推荐你买一本 正则表达式书籍,系统的学习一下,不难,很简单。绿皮的那本书 |
![]() | 8 emric 2021-06-02 09:52:03 +08:00 ![]() 我猜楼主想要的是这个: \[((#|[3-9]|[1-2][0-9]|3[0-7]),?)*\] |
9 TomatoYuyuko 2021-06-02 09:56:58 +08:00 split 写快多了,能不用正则就不要用,数组操作多爽啊 |
![]() | 10 balabalaguguji 2021-06-02 09:59:16 +08:00 用工具测试下就好啦 https://tools.fun/regexp.html |
![]() | 11 luckyrayyy 2021-06-02 10:15:35 +08:00 ![]() 当你想用正则解决一个问题,那么你就有了两个问题。 |
12 shyangs 2021-06-02 10:34:15 +08:00 如果你有一,想用正表式解,那你就有了。 |
13 ungrown 2021-06-02 13:2959 +08:00 正则是个好东西,但是别啥都用正则,你把字符串掐头去尾再分隔开来处理,不是轻松愉快吗? 一个复杂的正则匹配难道运行效率就不低了? |
![]() | 14 BeautifulSoap 2021-06-02 13:43:08 +08:00 via Android 那啥,正则性能挺差的,尤其你这种奇怪的需求,能不同正则就别用 |
![]() | 15 xiangchen2011 2021-06-02 19:31:12 +08:00 @shyangs 这话说得对 |