簡體   English   中英

正則表達式匹配最后一個破折號后的所有數字

[英]Regular expression match all numbers after the last dash?

嘗試在字符串中最后一個破折號后找到最后一個數字實例

test-123-2-456將返回456

123-test將返回""

123-test-456將返回456

123-test-456sdfsdf將返回456

123-test-asd456將返回456

表達式@"[^-]*$"與數字不匹配,我嘗試使用[\\ d],但無濟於事。

當然,最簡單的解決方案是這樣的:

(\d+)[^-]*$

這將匹配在組1中捕獲的一個或多個數字,后跟連字符之外的任何字符中的零個或多個,后跟字符串的結尾。 換句話說,只要該序列與字符串結尾之間沒有連字符,它就會匹配任何數字序列。 然后你只需從比賽中提取第1組。 例如:

var inputs = new[] {
    "test-123-2-456",
    "123-test",
    "123-test-456",
    "123-test-456sdfsdf",
    "123-test-asd456"
};
foreach(var str in inputs)
{
    var m = Regex.Match(str, @"(\d+)[^-]*$");
    Console.WriteLine("{0} --> {1}", str, m.Groups[1].Value);
}

生產:

test-123-2-456 --> 456
123-test --> 
123-test-456 --> 456
123-test-456sdfsdf --> 456
123-test-asd456 --> 456

或者,如果您可以使用這樣的負向前瞻

\d+(?!.*-)

這將匹配一個或多個數字字符,只要它們后面沒有連字符。 匹配中僅包含數字。

請注意,如果在最后一個之后有兩組或更多組數字,則這兩個選項的行為會有所不同-例如foo-123bar456 在這種情況下,你不清楚你想要發生什么,但是第一個模式將簡單地匹配從第一個數字序列開始到結束的所有內容( 123bar456 ),其中第1組僅包含第一個數字序列( 123 )。 如果您想要更改它以便它只捕獲最后一個數字序列,請將\\d放在字符類中(即(\\d+)[^\\d-]*$ )。 第二個第二個模式將為每個序列數字(在此示例中為123456 )生成單獨的匹配,但Regex.Match方法僅為您提供第一個匹配。

此RegEx的最新組可以為您獲取最后一個號碼:

[^-A-z][0-9]+[^A-z]

如果您正在查看組,可以通過匹配組來編寫此代碼以獲取最新數字:

var inputs = new[] {
    "test-123-2-456",
    "123-test",
    "123-test-456",
    "123-test-456sdfsdf",
    "123-test-asd456"
};


 var m = Regex.Match(str, @"([0-9]*)");
 if(m.Groups.Length>1) //This will avoid the values starting with numbers only.
   Console.WriteLine("{0} --> {1}", str, m.Groups[m.Groups.Length-1].Value);

我建議應用兩個正則表達式函數。 取第一個的結果作為第二個的輸入。

第一個正則表達式是:

-[0-9]+[^-]+$    // Take the last peace of your string lead by a minus (-)
                 // followed by digits ([0-9]+)
                 // and some ugly rest that doesn't contain another minus ([^-]+$) 

第二個正則表達式是:

-[0-9]+          // Seperate the relevant digits from the ugly rest
                 // You know that there can only be one minus + digits part in it

在此測試: http//derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

暫無
暫無

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

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