我在java中使用regex从我大学的房间列表中获取特定输出。
列表中的结果如下:
我想得到冒号和括号之间的值。
我现在使用的正则表达式是:
pattern = Pattern.compile("[:]([A-Za-z0-9ÆØÅæøå-]+)");
matcher = pattern.matcher(room.text());
我已经包括ÆØÅ,因为有些房间里有挪威字母。
不幸的是,正则表达式还在输出中包含了构建代码(例如“A55”)......如下所示:
A55
A55
A55
:G260
:G292
:G316
关于如何解决这个问题的任何想法?
答案 0 :(得分:2)
问题不在于你的正则表达式。您需要引用组(1
)作为匹配结果。
while (matcher.find()) {
System.out.println(matcher.group(1));
}
但是,您可以考虑使用否定字符类。
pattern = Pattern.compile(":([^)]+)");
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
import java.util.regex.Matcher; import java.util.regex.Pattern;
班级考试 { public static void main(String 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));
}
} }