regex - 检查提供的字符串是否是有效的项目列表
问题描述
我想验证用户提供的字符串是否在 Groovy 中形成逗号分隔项(整数、字符串、混合 - 无关紧要)的列表。两个主要要求是列表不能包含空项,并且列表中的任何地方都不应有空格。所以样本有效字符串将是:
1,2,3
1,a,https://test
brown,fox,cat
EN,ES,XOO,ksSIj
test
?@)($,one,two
虽然无效是这样的:
,,,
12,,34
a, b, c
在 groovy 中执行此操作的最佳方法是什么?我想到的唯一想法是正则表达式[^,]+
(尽管这个允许空格字符。任何其他可能性或正在调整这个正则表达式,直到它以唯一的方式工作 - 如果是这样,用正则表达式表达这一点的最简单的方法是什么?
解决方案
您可以在这里使用的正则表达式是
/^[^\s,]+(?:,[^\s,]+)*$/
请参阅正则表达式演示和正则表达式图:
详细地:
^
- 字符串的开始[^\s,]+
- 除空格和逗号之外的 1+ 个字符(?:,[^\s,]+)*
- 0次或多次重复,
- 逗号[^\s,]+
- 除空格和逗号之外的 1+ 个字符
$
- 字符串结束。
在 Groovy 中使用斜杠字符串来定义正则表达式,以便将单个反斜杠与正则表达式转义一起使用。
此外,如果您使用==~
运算符,您甚至不需要^
和$
锚点,因为==~
正则表达式匹配运算符需要在 Groovy 中进行完整的字符串匹配:
def s = '1,a,https://test'
def regex = /[^\s,]+(?:,[^\s,]+)*/
print s ==~ regex
输出为true
,或者false
如果您在末尾添加逗号。
请参阅此 Groovy 演示。
如果必须使用=~
运算符,请保留锚点:
def regex = /^[^\s,]+(?:,[^\s,]+)*$/
print s =~ regex
推荐阅读
- python-3.x - 如何通过beautifulsoup4将抓取的数据上传到csv文件
- video - 使用 FFmpeg 添加 2 个带有 scale2ref 40% 视频宽度和超时的水印
- node.js - 既然 appcfg 不见了,就从 app_engine 下载源代码?
- karate - 空手道 - 仅对引用的对象进行模式验证,默认情况下忽略未引用的对象
- android - DrawerLayout 内的 constraintLayout 内的 RecyclerView 不会滚动
- javascript - 是否可以在没有所有参数的情况下调用/等待异步函数?
- react-admin - 如果我想在过滤器和列表之间添加一些信息文本怎么办?
- assembly - 调用 printf 在使用 gcc 编译的程序集中产生分段错误、核心转储错误
- python - 如何检查 Python 脚本安装了哪些模块
- python - 如何使用另一个文件作为 azure 函数的输入参数运行 python 脚本?