因为正则表达式,我一直在战斗中......
我在回应[14-23.0, 14-23, 23.320]
中得到了类似的东西.我将分步解释清楚。
a) 响应中的值应设置为编辑文本。(我已经做到了)
b) 不应验证响应中的值。
c) 应验证除响应以外的值。
下面是不需要验证的字符串。
a)14-23.0
b)14-23
c)23.320
需要验证的方案。
a)14--23.0
b)1.4-23.0
C)14-2.3.0
以下代码我使用哪个不起作用。
public static String BondPricePatternValidation(String mString){
String pattern = "(\d+)-(\d+).(\d+)";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(mString);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
} else {
System.out.println("NO MATCH");
}
return pattern;
}
有人可以在正则表达式中帮助我做到这一点吗?
^(\d+-)?(\d+)\.?\d+$
应该可以解决问题。
让我知道它是否适合您的需求。
我不确定我是否理解你的问题。因此,让我根据我的理解重申您的问题。您正在寻找一个正则表达式,它只允许 (1) 单独使用类似浮点数的数字,或 (2) 看起来像一个类似整数的数字与另一个整数甚至类似浮点数之间的范围,严格来说中间有一个破折号。可能不完全是这样,但让我以这种方式回答问题,正如您澄清的那样,我将进行编辑。
让我们从第二种选择开始,rangE。您可能不想要像 0004
这样的数字,因此以下是匹配"常规外观"整数的方法:
[1-9]\d*
然后,你只需要一个破折号,很简单:
[1-9]\d*-
然后,另一个数字,除了这个可以像浮点数一样,所以让我们使用量词?
:
[1-9]\d*-[1-9]\d*(?:\.\d+)?
现在,要完成此操作,我们只需要使整个范围部分也可选:
[1-9]\d*(?:-[1-9]\d*(?:\.\d+)?)?
应该就是这样。顺便说一句,如您所见,您需要转义您的.
,否则它们代表通配符。
最后一点是关于锚定的。您可以简单地在两端添加^
和$
,以免每端都允许其他字符:
^[1-9]\d*(?:-[1-9]\d*(?:\.\d+)?)?$
但是,如果您打算在较大的文本块中匹配此模式,则需要使用否定的后视断言:
(?<![1-9])[1-9]\d*(?:-[1-9]\d*(?:\.\d+)?)?