[英]Regex pattern matcher
我有一個字符串: 154545K->12345K(524288K)
假設我要從此字符串中提取數字。
該字符串包含在位置0
處的組154545
,在位置1
處的組12345
和在位置2
處的組524288
。
使用regex \\\\d+
,我需要提取位置1
處的12345
。
我正在使用此方法得到預期的結果:
String lString = "154545K->12345K(524288K)";
Pattern lPattern = Pattern.compile("\\d+");
Matcher lMatcher = lPattern.matcher(lString);
String lOutput = "";
int lPosition = 1;
int lGroupCount = 0;
while(lMatcher.find()) {
if(lGroupCount == lPosition) {
lOutput = lMatcher.group();
break;
}
else {
lGroupCount++;
}
}
System.out.println(lOutput);
但是,還有其他簡單而直接的方法來實現這一點, 使正則表達式保持\\\\d+
相同 (不使用組計數器)嗎?
嘗試這個
String d1 = "154545K->12345K(524288K)".replaceAll("(\\d+)\\D+(\\d+).*", "$1");
如果您希望數字位於位置1,則可以使用find(int start)
方法
if (lMatcher.find(1) && lMatcher.start() == 1) {
// Found lMatcher.group()
}
您還可以將循環轉換為for循環,以獲得一些樣板代碼
String lString = "154540K->12341K(524288K)";
Pattern lPattern = Pattern.compile("\\d+");
Matcher lMatcher = lPattern.matcher(lString);
int lPosition = 2;
for (int i = 0; i < lPosition && lMatcher.find(); i++) {}
if (!lMatcher.hitEnd()) {
System.out.println(lMatcher.group());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.