如何为String创建简单矩阵,可以包含以下组合
123456 ABC
123456AB1
123456AB12
123456AB123
123456
例如
if ("\\d + \\d + \\d + \\d + \\d + \\d
+ \\s
+ [a-zA-Z]+[a-zA-Z]+[a-zA-Z]") {
//passed variant from input in form 123456 ABC
} else if ("\\d + \\d + \\d + \\d + \\d + \\d
+ [a-zA-Z]+[a-zA-Z]+[a-zA-Z]
+ \\d") {
//passed variant from input in form 123456AB1
} else if ("\\d + \\d + \\d + \\d + \\d + \\d
+ [a-zA-Z]+[a-zA-Z]+[a-zA-Z]
+ \\d + \\d") {
//passed variant from input in form 123456AB12
} else if ("\\d + \\d + \\d + \\d + \\d + \\d
+ [a-zA-Z]+[a-zA-Z]+[a-zA-Z]
+ \\d + \\d + \\d") {
//passed variant from input in form 123456AB123
} else if ("\\d + \\d + \\d + \\d + \\d + \\d") {
//passed variant from input in form 0123456
} else {
//doesn't match
}
答案 0 :(得分:2)
例如,您可以使用以下正则表达式
123456 ABC -> \\d{6}\\s\\w{3}
123456AB1 -> \\d{6}\\w{3}
123456AB12 -> \\d{6}\\w{4}
123456AB123 -> \\d{6}\\w{5}
123456 -> \\d{6}
if-clauses可以在您的示例中使用,例如
if(str.matches("\\d{6}\\s\\w+") {
...
} ...
正如您的问题,这些正则表达式变体仅涵盖此示例中的确切组合。
答案 1 :(得分:1)
如果您需要将输入字符串拆分为相关部分,请尝试使用此正则表达式:(\d{6})\s*([a-zA-Z]*)(\d*)
对于123456AB123
,群组1为123456
,群组2为AB
,群组3为123
。
当群组丢失时,他们只是一个emtpy字符串。
请注意,如果变体之间的唯一区别是组(组1始终存在,组2和组3可能为空),则不需要在不同的正则表达式上使用if-else。相反,你可能会有这样的东西(伪代码):
if(matches) {
groups[3] = extractGroups();
//groups[0] should always exist
if(groups[1] is not empty) {
...
}
if(groups[2] is not empty) {
...
}
} else {
handle non-match
}