簡體   English   中英

正則表達式模式匹配器

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

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