簡體   English   中英

在匹配的正則表達式中替換字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM