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

我正在读取一个 Java 应用程序的文件,该文件的数据由以下格式的冒号分隔:


test : test : 0 : 0

其中前两段是某物的名称,后两段是数字。


如果输入的格式不是上面那样的格式(除了数据不同),匹配应该失败


test : test : 0 : 0 -----> pass

: test: 0 : 0       -----> fail

0 : test : 0 : test -----> fail

test test : 0 : 0   -----> fail

因此,如果省略了任何段,则匹配将失败,如果数字和单词没有出现在它们应该出现的位置,即word : word : digit : digit,必须有 3 个冒号和 4 个段,不能超过以上。


这是我到目前为止所取得的进展,但并不完全正确:


^\D+(?:\s\:\s\w+)*$


汪汪一只猫
浏览 312回答 3
3回答

FFIVE

你可以使用像这样的正则表达式^[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}")查看正则表达式演示

扬帆大鱼

我只会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");}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java