我编写了以下Java代码:
public void test(final String myString){
final String rule = "^[A-Z]\\d{2}(\\.\\d){0,2}$";
final Pattern pattern = Pattern.compile(rule);
final Matcher matcher = pattern.matcher(myString);
if(!matcher.matches()){
System.out.println("Failure, the String" + myString + " is not valid!");
}
}
正则表达式应该通过以下字符串有效:
[character are required][number are required][number are required][point is optional][number is optional][number is optional]
重要的是,如果在字符串中声明了一个点,则必须至少遵循一个数字!
我的解决方案仅适用于J45或J45.9等字符串
允许这样的Java Java:
D99
M00.0
M01.6
J98.3
T05.0
M96.81
D68.20
不允许使用像这样的Java字符串:
9D.0
6G
7H.
M96.811
J234.82
G687.1
GU87.11
如何通过在Java中使用正则表达式来解决此问题?
答案 0 :(得分:0)
[point is optional] [number is optional] [number is optional]
您需要使点可选,并将{0,2}
量词仅设置为\d
模式:
^[A-Z]\d{2}\.?\d{0,2}$
请参阅regex demo
<强>详情:
^
- 字符串锚的开始[A-Z]
- 一个大写的ASCII字母\d{2}
- 任意2位数字\.?
- 可选点\d{0,2}
- 任意0到2位$
- 字符串结束。由于您使用默认情况下固定模式的.matches()
,因此您可以在没有^
和$
锚点的情况下声明它
final String rule = "[A-Z]\\d{2}\\.?\\d{0,2}";
或者,如果点后必须有1或2位数,或者如果不存在点,则允许0到2位数,您可以考虑使用
^[A-Z]\d{2}(?:\.\d{1,2}|\d{0,2})$
请参阅this regex demo,并使用
final String rule = "[A-Z]\\d{2}(?:\\.\\d{1,2}|\\d{0,2})";
其中(?:\\.\\d{1,2}|\\d{0,2})
匹配.
,然后匹配任何1或2位数字,或任何0到2位数字。
答案 1 :(得分:0)
这个正则表达式:
后跟一个点和1-2个数字的可选组合
^[A-Z]\d{2}(?:\.\d{1,2})?$