[英]Regex after a special character in Java
我在Java中使用正則表達式從大學的房間列表中獲取特定輸出。
清單中的支出如下所示:
我想獲得介於冒號和括號之間的值。
我目前使用的正則表達式是:
pattern = Pattern.compile("[:]([A-Za-z0-9ÆØÅæøå-]+)");
matcher = pattern.matcher(room.text());
我包括了ÆØÅ,因為其中一些房間里有挪威字母。
不幸的是,正則表達式還在輸出中包括了建築代碼(例如“ A55”)...像這樣出來:
A55
A55
A55
:G260
:G292
:G316
關於如何解決這個問題的任何想法?
問題不在於您的正則表達式。 您需要引用group( 1
)作為匹配結果。
while (matcher.find()) {
System.out.println(matcher.group(1));
}
但是,您可以考慮使用否定字符類。
pattern = Pattern.compile(":([^)]+)");
您可以嘗試這樣的正則表達式:
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
可以嘗試使用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
導入java.util.regex.Matcher; 導入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));
}
}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.