2015-02-11 2 views
0

Я использую regex в java, чтобы получить конкретный результат из списка комнат моего университета.Regex после специального символа в Java

вентиляционного из списка выглядит следующим образом:

  • (A55: G260) Лабораториум 260
  • (A55: G292) Grupperom 292
  • (A55: G316) Grupperom 316
  • (А55: G366) Grupperom 366
  • (ГДС: Floyen) Флёйен (приложение)
  • (ODO: PC-Stue) Pulpakammeret (ПК-Stue)
  • (SALEM: KONF) Konferanserom

Я хочу получить значение, которое находится между двоеточием и скобкой.

Регулярное выражение, я использую в данный момент:

pattern = Pattern.compile("[:]([A-Za-z0-9ÆØÅæøå-]+)"); 
matcher = pattern.matcher(room.text()); 

Я включил ÆØÅ, потому что некоторые из номеров имеют норвежские буквы в них.

К сожалению, регулярное выражение включает в себя код здания также (например, «А55») на выходе ... Выходит так:

A55 
A55 
A55 
:G260 
:G292 
:G316 

Любые идеи о том, как решить эту проблему?

+0

в каком выходе? вы показываете только регулярное выражение, но как вы на самом деле используете совпадение для получения результатов? добавьте это к вопросу. – eis

ответ

0

Вы можете попробовать регулярное выражение, как это:

public static void main(String[] args) { 
    String s = "(HDS:FLØYEN) Fløyen (appendix)"; 
    // select everything after ":" upto the first ")" and replace the entire regex with the selcted data 
    System.out.println(s.replaceAll(".*?:(.*?)\\).*", "$1")); 
    String s1 = "ODO:PC-STUE) Pulpakammeret (PC-stue)"; 
    System.out.println(s1.replaceAll(".*?:(.*?)\\).*", "$1")); 
} 

O/P:

FLØYEN 
PC-STUE 
1

Проблема не регулярное выражение. Вам нужно указать группу (1) для результата матча.

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

Однако, вы можете вместо этого использовать вместо него символ символа отрицания.

pattern = Pattern.compile(":([^)]+)"); 
+0

Удивительный! Это сработало, спасибо вам большое :) – Gaute

0

Может попробовать с String Opreations следующим образом,

String val = "(HDS:FLØYEN) Fløyen (appendix)"; 

if(val.contains(":")){ 

    String valSub = val.split("\\s")[0]; 
    System.out.println(valSub); 

    valSub = valSub.substring(1, valSub.length()-1); 

    String valA = valSub.split(":")[0]; 
    String valB = valSub.split(":")[1]; 

    System.out.println(valA); 
    System.out.println(valB); 

} 

Выход:

(HDS:FLØYEN) 
HDS 
FLØYEN 
0

импорт java.util.regex.Matcher; импорт java.util.regex.Pattern;

тест класс { государственной статической силы основных (String арг []) {

// String to be scanned to find the pattern. 
    String line = "(HDS:FLØYEN) Fløyen (appendix)"; 
    String pattern = ":([^)]+)"; 

    // Create a Pattern object 
    Pattern r = Pattern.compile(pattern); 

    // Now create matcher object. 
    Matcher m = r.matcher(line); 
    while (m.find()) { 
    System.out.println(m.group(1)); 
} 

}}

Смежные вопросы