[英]C# Regex match the last digit after the last underscore
使用正則表達式,我試圖只獲取最后一個下划線后的最后一位數字(只能是 2 或 3)。
我現在擁有的是獲取數字和字符。 我需要切斷字符,只得到數字 [2-3]。
這是我的例子——我只需要在最后一個下划線后得到 2。 當前同時獲取數字和字符
ABC_0000_DEFG_1I_23_45_HIJKL2.pdf
The output I want -- 2 (after HIJKL).
^.*_\K[^.]+
If I get rid of ^ with \d, d{2-3}, ... it still gets HIJKL.
您可以使用
_[^_]*(\d)[^_]*$
它與最后一個下划線匹配,后跟一個被除下划線以外的任何東西包圍的數字。
如果您想忽略2
或3
以外的任何內容,您可以使用[23]
而不是\\d
。
正則表達式
_[^_]*([2-3])[^_]*$
應該做你。 它匹配:
_
— 下划線,后跟[^_]*
— 除下划線外的零個或多個字符,后跟([23])
— 十進制數字2
或3
,后跟[^_]*
— 除下划線外的零個或多個字符,后跟$
— 文本結束您將需要獲得匹配組 #1:
var rx = new Regex(@"_[^_]*([2-3])[^_]*$");
var m = rx.Match("ABC_0000_DEFG_1I_23_45_HIJKL2.pdf");
var s = m.Success ? m.Groups(1) : null;
此時, s
應為“2”。
要僅在 .NET 中進行匹配,您還可以使用環視:
(?<=_[^_]*)[23](?=[^_]*$)
模式匹配:
(?<=_[^_]*)
正向后視,斷言_
后跟除_
以外的可選字符[23]
匹配 2 或 3(?=[^_]*$)
正向前瞻斷言沒有_
直到字符串的末尾請參閱.NET regex 演示或C# 演示。
示例代碼
Regex regex = new Regex(@"(?<=_[^_]*)[23](?=[^_]*$)");
Match match = regex.Match("ABC_0000_DEFG_1I_23_45_HIJKL2.pdf");
if (match.Success)
{
Console.WriteLine(match.Value);
}
輸出
2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.