2013-06-28 98 views
-1

我有一個行項目稱爲正則表達式所需的正則表達式

付款 - 謝謝 - $ 50.00。

我想這個值作爲分裂

付款 - 謝謝你爲關鍵

和值

- $ 50,00。

我寫的正則表達式如下

Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-?\\$[0-9|,]*\\.[0-9][0-9])"); 

,但我拿到鑰匙作爲支付 - 謝謝你 - 和價值至$ 50 可以在任何一個請幫助我什麼是錯的正則表達式

+1

更好地解釋自己在做什麼。如果你的線路總是相同的,只需分割已知的索引。 –

+0

您在'YOU-'中匹配'-'的原因與您在'PAYMENT - THANK'之間匹配'-''的原因相同,因爲您已經說過匹配第一個字符集中的'-'。 – Aiias

+0

描述變化alwyas,但它將被隔離 - – user2394281

回答

7

你得到這個的原因是因爲第一個塊有一個貪婪的正則表達式。第一組捕獲-只是因爲它被允許。

一兩件事,將修復它是-後刪除?,迫使-是在第二個正則表達式

Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-\\$[0-9|,]*\\.[0-9][0-9])"); 

http://rubular.com/r/MDHPux502R


考慮的事實?是首先,我懷疑-是可選的,

使第一批非貪婪可以將+

Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-?\\$[0-9|,]*\\.[0-9][0-9])"); 

http://rubular.com/r/In9M650QcB

0

我不知道你想在你的模式\\-?部分完成什麼後添加?,但這應該工作:

Pattern.compile("([a-zA-Z -]*[a-zA-Z ])(-?\\$[0-9|,]*\\.[0-9][0-9])"); 
0

除非另有規定,在可能的情況下,數據往往會進入早期的領域。

你需要做的是指定的第一個字段的最後一個字符可能不是一個破折號:

Pattern.compile("([a-zA-Z -? a-zA-Z]+[^-])(-?\\$[0-9|,]*\\.[0-9][0-9])"); 
0

試試這個:

"([a-zA-Z -]+)(-?\\$[0-9|,]*\\.[0-9][0-9])" 

你的正則表達式是捕捉 - 中第一個字符組。

0

嘗試了下:

public static void main(String[] args) { 
    Pattern pattern = Pattern.compile("([\\S ]*[^-])(-?\\$[\\d,]*\\.\\d{2}).*"); 

    String line = "PAYMENT - THANK YOU-$50.00."; 

    Matcher matcher = pattern.matcher(line); 
    String key = matcher.replaceAll("$1"); 
    String value = matcher.replaceAll("$2"); 

    System.out.println(key); 
    System.out.println(value); 
} 

輸出:

PAYMENT - THANK YOU 
-$50.00 

和:

enter image description here