簡體   English   中英

正則表達式:匹配通配符,后跟可變長度的數字

[英]Regex: Match wildcard followed by variable length of digits

我正在嘗試使用以下正則表達式從類似字符串的Personal number: 123456提取個人號碼:

(Personal number|Personalnummer).*(\d{2,10})

當嘗試獲得第二組時,它將僅包含個人號碼的后兩位。 如果我將數字范圍更改為{3,10} ,它將與個人號碼的最后3位數字匹配。

現在,我不能只是將空格添加為附加組,因為我無法確定總會有空格-可能沒有空格或其他字符,但是個人號碼始終在結尾。

無論如何,我可以指示解析器獲取整個數字字符串嗎?

.*充當正則表達式的貪婪量詞。 最終它會吃掉所有匹配的字符,除了最后兩個必須與之匹配的字符。

您必須通過申請使其舍不得? 像下面

(Personal number|Personalnummer).*?(\d{2,10})

現在應該可以正常工作了。

您還可以將第一個組轉換為非捕獲組,然后在如下所示的答案中僅獲得所需的數字。

(?:Personal number|Personalnummer).*?(\d{2,10})

在通配符匹配上使用一個不願意的量詞 (例如*? )。 例如.*? 將導致完整的數字表達式:

Pattern p = Pattern.compile("(Personal number|Personalnummer).*?(\\d{2,10})");//note the ?
Matcher m = p.matcher("Personal number:    123456");
if ( m.find() ){
    System.out.println(m.group(2));
}

暫無
暫無

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

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