java - 修改正则表达式以允许 float

标签 java regex

我在代码中使用了这个来识别整数

Pattern patternNumber = Pattern.compile("[0-9]+");

为了读取输入,我一直在使用*:

 String input = "x: 1.6 ..10;";
 String[] meta = a.split("(?:(?<=^|\\s)(?=\\S)|(?<=\\S|^)(?=\\s))\\b(?:(?<=\\S)(?=\\s|$)|(?<=\\s)(?=\\S|$))|\\b");

*由我发现的内容提供 here ,稍加修改以适应。我对正则表达式没有太多经验,但这条线对我来说神奇地有效。

然后我继续包含 float :

Pattern patternNumber = Pattern.compile("\\d*\\.\\d+|\\d+");

但现在我似乎无法让它工作。对于 float 部分,它分割数字,给我:

1  
.  
6

我想要的是:

1.6

我发现如果我单独使用它会起作用:

 String input = "1.6";
 String[] meta = a.split("\\D\\.\\D");

知道如何使这部分与 split 方法中的表达式的其余部分一起使用吗?

最佳答案

我认为split不是实现您目的的最佳工具。

split将在正则表达式上分割您的输入字符串。例如,如果您这样做 split1,2,3,apples使用正则表达式, ,你会得到1 , 2, 3 ,和apples .

你的复杂split正则表达式 "(?:(?<=^|\\s)(?=\\S)|(?<=\\S|^)(?=\\s))\\b*(?:(?<=\\S)(?=\\s|$)|(?<=\\s)(?=\\S|$))|\\b"基本上尝试在单词之间的边界上分割字符串(考虑到单词位于字符串的开头/结尾,或者以 . ( ..10 )开头)。

相反,显式查找数字本身会容易得多!无需在数字之间的空格上进行分割,只需显式匹配数字即可。

所以你使用正则表达式来表示数字/ float \\d*\\.\\d+|\\d+并使用 myMatcher.group() 打印出匹配项(而不是拆分) .

例如:

String input = "x: 1.6 ..10;";
myPattern = Pattern.compile('\\d*\\.\\d+|\\d+');
myMatcher = Pattern.matcher(input);
while (myMatcher.find()) {
    System.out.println(myMatcher.group());
    // will print 1.6, .10
}

根据您想要的内容(例如,关于 ..10 ),可以调整正则表达式。

关于java - 修改正则表达式以允许 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8632683/

相关文章:

java - HSQLDB 中的 Oracle NUMBER(精度,小数位数)

javascript - 输入元素如何检查字符串是否匹配模式属性中指定的正则表达式?

java - matches() 方法的模式匹配无法正常工作

ruby - gsub 部分替换

java - API - 如何让 API 用户声明自己的类型(然后由 API 使用)?

java - 如何将自定义 SSLSocketFactory 注入(inject) Azure Java SDK

javascript - 正则表达式匹配是否比检查对象集合中的键更有效?

java - Java 中匹配某个单词零次或一次出现的正则表达式

java - 无法建立与 jdbc 的连接 :sqlserver in Netbeans AND MMC could not create snap-in in SSCM

java - Jdev 在迁移时崩溃