2015-02-11 76 views
0

我在java中使用正则表达式来从我的大学的房间列表中获取特定的输出。在Java中的特殊字符后的正则表达式

从列表甲出气看起来像这样:

  • (A55:G260)LABORATORIUM 260
  • (A55:G292)Grupperom 292
  • (A55:G316)Grupperom 316
  • ( A55:G366)Grupperom 366
  • (HDS:弗罗伊恩)前往Fløyen(附录)
  • (ODO:PC-Stue酒店)Pulpakammeret(PC-Stue酒店)
  • (SALEM:KONF)Konferanserom

我想获取冒号和括号之间的值。

我使用目前的正则表达式是:

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

我已经包括ÆØÅ,因为一些房间中都有挪威字母。

不幸的是,正则表达式包括建筑规范也输出(例如“A55”)......出来像这样:

A55 
A55 
A55 
:G260 
:G292 
:G316 

如何解决这个任何想法?

+0

在什么输出?你只显示正则表达式,但你如何实际使用匹配器来检索结果?再加上这个问题。 – eis 2015-02-11 13:31:33

回答

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 2015-02-11 13:41:59

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中; import java.util.regex.Pattern;

类测试 { 公共静态无效主要(字符串ARGS []){

// 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)); 
} 

} }