簡體   English   中英

Java regex,替換某些字符,除了

[英]Java regex, replace certain characters except

我有這個字符串“u2x4m5x7”,我想用“”替換所有字符,但一個數字后跟一個x。 輸出應該是:“2x5x” 只是數字后跟 x。 但我得到了這個:“2x45x7”

我這樣做:

String string = "u2x4m5x7";

String s = string.replaceAll("[^0-9+x]","");

請幫忙!!!

這是一個使用String#replaceAll和兩個替換的單行:

System.out.println(string.replaceAll("\\d+(?!x)", "").replaceAll("[^x\\d]", ""));

這是另一個有效的解決方案。 我們可以使用具有模式\\d+x的正式模式匹配器來迭代輸入字符串。 這是白名單方法,嘗試匹配我們想要保留的變量組合。

String input = "u2x4m5x7";
Pattern pattern = Pattern.compile("\\d+x");
Matcher m = pattern.matcher(input);
StringBuilder b = new StringBuilder();

while(m.find()) {
    b.append(m.group(0));
}

System.out.println(b)

這打印:

2x5x

捕獲您需要的$1任何字符並替換為捕獲的$1 (如果|.匹配$1空)。

String s = string.replaceAll("(\\d+x)|.", "$1");

在 regex101 上查看此演示在 tio.run 上查看Java 演示

看起來通過搜索獲得匹配而不是替換所有非匹配會更簡單,但這是一個可能的解決方案,盡管它可能會遺漏一些情況:

\d(?!x)|[^0-9x]|(?<!\d)x

https://regex101.com/r/v6udph/1

基本上它會:

  • \\d(?!x) -- 刪除后面沒有x任何數字
  • [^0-9x] -- 刪除所有非 x/數字字符
  • (?<!\\d)x -- 刪除所有x前面沒有數字的

但話又說回來,從\\dx抓取會簡單得多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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