2016-10-06 2 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 
____________ 

Однако я не могу сопоставить «xxx» от ФИНАНСИРОВАНИЯ. Как извлечь этот шаблон?

ответ

0

Изменить

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

в

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

как NAME и BRANCH находятся на одной и той же линии.

Matcher#find() найдет первое совпадение в строке, не все совпадения. Чтобы получить все совпадения, вам нужно позвонить по телефону find() несколько раз.

+0

Спасибо! Просто небольшой вопрос: как заменить эти согласованные жетоны? Я относительно новичок в RegEx, поэтому, пожалуйста, простите меня, если я буду казаться доверчивым –

+0

'stringToAlter.replace (m.group(),« WhateverAlterContent »)'; – Antoniossss

+0

Правильно ли это? для (...) { if (line [i] .contains ("somePattern")) { line [i] = line [i] .replace (m.group(), "myReplacement"); } } –