因为正则表达式,我一直在这场战斗中。
我在回应[14-23.0, 14-23, 23.320]
中得到了类似的内容。我将在步骤中清楚地解释。
a)响应中的值应设置为EditText。(我已完成)
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;
}
有人可以帮我正则表达式吗?
答案 0 :(得分:1)
^(\\d+-)?(\\d+)\\.?\\d+$
应该可以解决问题。
请告诉我它是否符合您的需求。
答案 1 :(得分:1)
我不确定我理解你的问题。所以,让我按照我的理解重新陈述你的问题。您正在寻找一个正则表达式,它只允许(1)单独的浮点数,或(2)类似整数的数字和另一个整数之间的范围一个漂浮的数字,严格地说在它们之间有一个短划线。可能这不完全是这样,但让我回答问题这个的方式,当你澄清我会编辑。
让我们从第二个选择 rangE 开始。你可能不想要0004
这样的数字,所以这里是你如何匹配“常规”整数:
[1-9]\\d*
然后,你只想要一个破折号,很容易:
[1-9]\\d*-
然后,除了这个之外的另一个数字可以是浮点数,所以让我们使用量词?
:
[1-9]\\d*-[1-9]\\d*(?:\\.\\d+)?
现在,要完成此操作,我们只需将整个范围部分设为可选:
[1-9]\\d*(?:-[1-9]\\d*(?:\\.\\d+)?)?
那应该是它。顺便说一句,正如你所看到的,你需要逃避.
s,否则它们代表通配符。
最后一点是关于锚定。您可以在每一端添加^
和$
,以免在每一方都允许其他字符:
^[1-9]\\d*(?:-[1-9]\\d*(?:\\.\\d+)?)?$
但是,如果您打算在更大的文本块中匹配此模式,则需要使用负面的lookbehind断言:
(?<![1-9])[1-9]\\d*(?:-[1-9]\\d*(?:\\.\\d+)?)?