2011-12-26 59 views
0

我在我的代码,其他的模式中,这样一来识别整数修改正则表达式来允许浮点数

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方法的其他表达式一起工作的任何想法?

+0

只是为了澄清,在原始字符串'X :1.6 ..10;',你是否想要走出'1.6'和'10'? – 2011-12-26 03:09:45

+0

@ mathematicalcoffee不,我没有。第一部分,我分好我的输入,一个“数字,一个点和另一个数字”,但现在我想让它识别整个浮点数 – Victor 2011-12-26 03:11:23

回答

1

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

split拆分您的输入字符串在您的正则表达式。例如,如果您使用正则表达式执行split,则会得到12,3和​​。

你的复杂split正则表达式"(?:(?<=^|\\s)(?=\\S)|(?<=\\S|^)(?=\\s))\\b*(?:(?<=\\S)(?=\\s|$)|(?<=\\s)(?=\\S|$))|\\b"基本上试图在字与字之间的边界划分的字符串(考虑到的东西就像一个词是在字符串的开始/结束,或开始用.(在..10))。

相反,它会更容易显式查找数字本身!而不是分开之间的数字之间的空格,只是显式匹配号码。

因此,您使用正则表达式来计算数字/浮点数\\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)正则表达式可以调整。

+0

这就是我的浮点数问题,但我应该提到我使用的是一个String数组我关心索引标记的顺序,因为它们出现在输入字符串中,所以我决定使用'split'。我的不好之处在于没有及时澄清,尽管你的答案可能只是我需要的另一个项目。 – Victor 2011-12-27 01:49:26

0

您可以在浮点数所使用范围之外的任何系列字符上进行拆分。

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

对于上述,元将被分配{“1.6”,“.. ..10" }

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

这将产生{ “123”, “-.456”, “78.910”, “11”, “-12”}

+0

对不起,需要很长时间回复。虽然你的答案使得整车意义重大,但我无法将其添加到我的原始表达式中。无论我如何安排它,我最终都不得不放置一个“\\ b”,这会打破我的浮点数。关于我如何完成将你的答案与我的表达结合在一起的任何线索? – Victor 2011-12-27 01:43:24

+0

当然。指定您的表达式,将其应用于其中的测试用例以及您想要的结果。你可能真的很接近。 – phatfingers 2011-12-27 01:48:02

+0

表达式,测试用例和结果是我在第一篇文章中发布的。像看起来那样怪异和愚蠢,我实际上无法在开头问题中描述的表达式中添加'[^ 0-9 .-] +'。例如,'x:1.6..10;'应该给我一个包含:'x',':','1.6','','','10'和';'的分割字符串。它适用于除'1.6'外的所有内容,如果将答案添加到该更大的表达式中,它将继续分解为“1”,“。”和“6”。希望它是有道理的。 – Victor 2011-12-27 02:01:21