簡體   English   中英

java 字符串正則表達式模式匹配和替換字符串

[英]java String regex pattern match and replace string

有一個字符串,如果該模式匹配只需要返回前幾個字符。

String str = "PM 17/PM 19 - Test String"; 

期待返回字符串 --> PM 17

這是我的字符串模式檢查:

1) 總是以PM開頭
2)然后是空間(或某個時間零空間)
3)然后是一些數字
4)然后是斜杠(即/)
5) 然后是相同的字符串PM
6)然后是空間(或某個時間零空間)
7) 然后是數字
8)然后是任何其他字符/字符串。

如果給定的字符串與上述模式匹配,我需要在斜杠之前獲取字符串(即PM 17

我嘗試了以下方式,但不適用於這種情況。

  if(str.matches("PM\\s+[0-9.]/PM(.*)")) { //"PM//s+[0-9]/PM(.*)"
                  str = str.substring(0, str.indexOf("/"));
                  flag = true;
  } 

而不是.matches您可以在此處使用.replaceFirst捕獲組

str = str.replaceFirst( "^(PM\\s*\\d+)/PM\\s*\\d+.*$", "$1" );
//=> PM 17

正則表達式演示

正則表達式詳細信息:

  • ^ : 行開始
  • (PM\\s*\\d+) :匹配和分組以PM開頭的文本,后跟 0 個或多個空格,后跟 1 個或多個數字
  • /PM\\s*\\d+ :匹配/PM后跟 0 個或多個空格,后跟 1 個或多個數字
  • .*$ :匹配行尾之前的任意字符數
  • $1 :是替換,將捕獲的第一組字符串放回替換中。

如果您想在 substring 提取之前進行輸入驗證,那么我建議使用以下代碼:

final String regex = "(PM\\s*\\d+)/PM\\s*\\d+.*";    
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(str);

if (matcher.matches()) {
    flag = true;
    str = matcher.group(1);
}

暫無
暫無

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

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