我该如何在下面编写正则表达式?
C 200 50
C / c可以是大写或小写。 200-0至200范围 50-o到50范围
所有三个单词都用空格分隔,并且可以有1个或更多的空格。
这是我到目前为止尝试过的。
public static void main(String[] args) {
String input = "C 200 50";
String regex = "C{1} ([01]?[0-9]?[0-9]|2[0-9][0]|20[0]) ([01]?[0-5]|[0-5][0])";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
boolean found = false;
while (matcher.find()) {
System.out.println("I found the text "+matcher.group()+" starting at index "+
matcher.start()+" and ending at index "+matcher.end());
found = true;
}
}
不确定如何有多个空格,第一个'C'上下浮动
答案 0 :(得分:1)
如果要验证字符串,则必须期待整个字符串匹配。这意味着您应该使用.matches()
而不是.find()
方法,因为.matches()
需要完整的字符串匹配。
要使c
和c
都匹配,可以在C
处使用Pattern.CASE_INSENSITIVE
标志,或者在嵌入Pattern.compile
的样式前添加模式标记选项。
要匹配一个或多个空格,可以使用(?i)
或+
。
要匹配前导零,可以在数字匹配部分的前面加上\\s+
。
因此,您可以使用
0*
然后
请参见regex demo和Regulex图:
请参见Java demo:
String regex = "(?i)C\\s+0*(\\d{1,2}|1\\d{2}|200)\\s+0*([1-4]?\\d|50)";
输出:
String input = "C 200 50";
String regex = "(?i)C +0*(\\d{1,2}|1\\d{2}|200) +0*([1-4]?\\d|50)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
boolean found = false;
if (matcher.matches()) {
System.out.println("I found the text "+matcher.group()+" starting at index "+
matcher.start()+" and ending at index "+matcher.end());
found = true;
}
如果需要部分匹配,请在I found the text C 200 50 starting at index 0 and ending at index 8
块中通过.find()
方法使用模式。要匹配整个单词,请用while
包装模式:
\\b