修改正则表达式以允许浮点数

时间:2011-12-26 03:04:30

标签: 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提供,略微修改以适应。我对Regex没有很多经验,但这条线神奇地为我工作。

然后我继续包括浮点数:

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

但现在我似乎无法让它发挥作用。对于浮动数字部分,它会分割数字,给我:

1  
.  
6

我想要的是:

1.6

如果我单独使用,我发现它有效:

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

关于如何使这部分与split方法的其余表达式一起工作的任何想法?

2 个答案:

答案 0 :(得分:1)

我认为split不是最适合您目的的工具。

split拆分您的正则表达式上的输入字符串。例如,如果您使用正则表达式split1,2,3,apples ,进行1,则会获得2,3 apples和{{1} }}

您复杂的split正则表达式"(?:(?<=^|\\s)(?=\\S)|(?<=\\S|^)(?=\\s))\\b*(?:(?<=\\S)(?=\\s|$)|(?<=\\s)(?=\\S|$))|\\b"基本上会尝试将字符串拆分为单词之间的边界(考虑字符串位于字符串开头/结尾处,或以{{开头) 1}}(.))。

相反,明确查找数字本身要容易得多!只需明确匹配数字,而不是在数字之间的空格上拆分

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

e.g:

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 } ),可以调整正则表达式。

答案 1 :(得分:0)

您可以拆分浮点数范围之外的任何一系列字符。

String input="x: 1.6 ..10";
String[] meta=input.split("[^0-9.-]+");

对于上述内容,meta将被分配{“1.6”,“。10”}

String[] example="123, -.456, 78.910 : 11 : -12".split("[^0-9.-]+")

这会产生{“123”,“ - 。466”,“78.910”,“11”,“ - 12”}