[英]Replace Character in Matching Regex
我有一個字符串,其子字符串具有以下格式:
ID Number: 4D:9B:C4
我正在使用以下正則表達式來匹配它:
ID Number: [A-Z0-9]{2}(:[A-Z0-9]{2}){2}
我想做的是捕獲與該正則表達式匹配的子字符串實例(或僅是第一個實例),然后捕獲內部的ID號本身,最后用空格替換ID號中的冒號,因此輸出將是:
4D 9B C4
我一直在嘗試使用捕獲組替換所有對象,將想要的捕獲內容放在括號中,如下所示。
String idNum = idNum.replaceAll("ID Number: ([A-Z0-9]{2}(:[A-Z0-9]{2}){2})", "$1");
但是我不確定從這里走哪條路,即使我采用正確的方法也不確定。 任何建議將不勝感激。
編輯:也許我沒有在描述中用這句話來表達最好的方式,所以我將舉例說明。 我捕獲的初始字符串是較大字符串中的子字符串,例如...
We got some text up here
ID Number: 4D:9B:C4
And also some text down here
我想要前面所述的輸出。
通過正則表達式和正則表達式。 錨\\G
在上一個匹配結束的位置匹配。
String s = "ID Number: 4D:9B:C4";
System.out.println(s.replaceAll("(?:ID Number: ([A-Z0-9]{2})|(?<!^)\\G):?([A-Z0-9]{2})","$1 $2"));
輸出:
4D 9B C4
另一個示例,其中有許多冒號分隔的部分。
String s = "ID Number: 4D:9B:C4:B5:C6:D7:F8:K9";
System.out.println(s.replaceAll("(?:ID Number: ([A-Z0-9]{2})|(?<!^)\\G):?([A-Z0-9]{2})","$1 $2"));
輸出:
4D 9B C4 B5 C6 D7 F8 K9
參考文獻:
更新:
String s = "We got some text up here\n" +
"ID Number: 4D:9B:C4:D4:F4\n" +
"And also some text down here";
System.out.println(s.replaceAll("(?s)(?:ID Number: ([A-Z0-9]{2})|(?<!^)\\G):?([A-Z0-9]{2})|.*?(?=ID Number:)|.+","$1 $2").trim());
我建議使用捕獲組來實際獲得您感興趣的內容。沒有理由不重復。
String idNum = idNum.replaceAll(
"ID Number: ([A-Z0-9]{2}):([A-Z0-9]{2}):([A-Z0-9]{2})",
"$1 $2 $3"
);
您可以先行使用。 並且由於您可能會多次使用此模式,因此將其創建為靜態最終變量:
private static final Pattern PATTERN = Pattern.compile(":(?=[A-Z0-9]{2})");
// ...
idNum = PATTERN.matcher(idNum).replaceAll(" ");
提供String模式不會發生太大變化,我願意
String str = "ID Number: 4D:9B:C4"
numbers = str.split(':')[1].split(':')
然后,您可能必須.trim()數組“數字”的元素。
之后,您可以將數字[0-2]連接在一起,並在兩者之間使用空格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.