为了账号安全,请及时绑定邮箱和手机立即绑定

使用正则表达式验证冒号分隔的输入

使用正则表达式验证冒号分隔的输入

汪汪一只猫 2021-10-13 17:35:53
我正在读取一个 Java 应用程序的文件,该文件的数据由以下格式的冒号分隔:test : test : 0 : 0其中前两段是某物的名称,后两段是数字。如果输入的格式不是上面那样的格式(除了数据不同),匹配应该失败test : test : 0 : 0 -----> pass: test: 0 : 0       -----> fail0 : test : 0 : test -----> failtest test : 0 : 0   -----> fail因此,如果省略了任何段,则匹配将失败,如果数字和单词没有出现在它们应该出现的位置,即word : word : digit : digit,必须有 3 个冒号和 4 个段,不能超过以上。这是我到目前为止所取得的进展,但并不完全正确:^\D+(?:\s\:\s\w+)*$
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

你可以使用像这样的正则表达式

^[a-zA-Z]+\s*:\s*[a-zA-Z]+(?:\s*:\s*\d+){2}$

细节

  • ^- 字符串的开始(隐含在String#matches

  • [a-zA-Z]+ - 1+ 个 ASCII 字母

  • \s*:\s*-:用 0+ 个空格包围

  • [a-zA-Z]+ - 1+ 个 ASCII 字母

  • (?:\s*:\s*\d+){2}- 两次出现:用 0+ 空格和 1+ 数字括起来

  • $- 字符串结尾(隐含在String#matches

注意:如果项目之间必须有一个强制性的单个空格,则需要替换\s*\s。要匹配 1 个或多个空格,\s*必须转换为\s+.

在 Java 中,你可以把它写成

s.matches("[a-zA-Z]+\\s*:\\s*[a-zA-Z]+(?:\\s*:\\s*\\d+){2}")

查看正则表达式演示


查看完整回答
反对 回复 2021-10-13
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

我只会String#matches在每一行上使用,使用以下模式:


[a-z]+ : [a-z]+ : [0-9]+ : [0-9]+

例如:


String line = "test : test : 0 : 0";

if (line.matches("[a-z]+ : [a-z]+ : [0-9]+ : [0-9]+")) {

    System.out.println("Found a match");

}


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 311 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信