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