2016-10-06 46 views
1

我正在編寫一個Java程序來計算一個人的平均工資,並在模板中打印每月扣除額。模板是這樣的:我應該爲以下模板使用哪種正則表達式?

==============BILL============== 
| NAME: xXxX  BRANCH : xxx | 
|        | 
| Month 1 : xxx.xxx   | 
| Month 2 : xxxx.xx   | 
|  <other Months>   | 
| Month 12 : xxx.xx   | 
|        | 
|  TOTAL : ____________  | 
================================ 

我使用下面的模式,試圖捕捉元素:

//template is stored in string. 
String[] lines = msg.split("\n"); 
Pattern p = Pattern.compile("[xX\\._]+"); 
for(String line : lines){ 
    Matcher m = p.matcher(line); 
    if(m.find()){ 
     System.out.println(m.group()); 
    } 
    else{ 
     System.out.println("no match found..."); 
    } 
} 

我得到的輸出是這樣的:

xXxX 
xxx.xxx 
xxxx.xx 
xxx.xx 
____________ 

但是,我無法匹配BRANCH的'xxx'。我如何提取該模式?

回答

0

變化

if(m.find()){ 
    System.out.println(m.group()); 
} 

while(m.find()){ 
     System.out.println(m.group()); 
} 

NAMEBRANCH是在同一行上。

Matcher#find()將在字符串中找到第一個匹配項,而不是全部匹配項。要獲得所有匹配,您必須多次撥打find()

+0

謝謝!只是一個小問題 - 如何替換這些匹配的令牌?我對RegEx比較新,所以請原諒我,如果我聽起來容易受騙 –

+0

'stringToAlter.replace(m.group(),「WhateverAlterContent」)'; – Antoniossss

+0

以下是正確的方法嗎?對於(...){ if(line [i] .contains(「somePattern」)){[i] = line [i] .replace(m.group(),「myReplacement」); } } –

相關問題