我需要创建一个正则表达式来检查文本是否遵循以下格式:
前两个字母始终是“ AB”,而不是数字 比A或B短1-9,比一串短划线('-') 随机文本后跟冒号(':'),然后是索引位置 一个字母和2位数字。
像这样:
AB8B-ANYLETTERS:H12
或
AB3B-ANYTHINGCANGOHERE:A77
我这样做是为了检查索引位置,但无法找出冒号之前的文本。
"^.*:[A-H]\\d\\d"
所以一般格式为:
AB[1-9][A or B]-[ANYCHARACTERS]:[A-Z][01-99]
我正在使用Java。
答案 0 :(得分:4)
我猜测也许这个表达式可以验证这一点:
^AB[1-9][AB]-[^:]+:[A-Z][0-9]{2}$
该表达式在regex101.com的右上角进行了解释,如果您想探索/简化/修改它,在this link中,您可以观察到它如何与某些示例输入匹配,如果你喜欢。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "^AB[1-9][AB]-[^:]+:[A-Z][0-9]{2}$";
final String string = "AB8B-ANYLETTERS:H12\n"
+ "AB3B-ANYTHINGCANGOHERE:A77";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
jex.im可视化正则表达式: