2011-12-26 78 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