簡體   English   中英

C# 正則表達式匹配最后一個下划線后的最后一位數字

[英]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)[^_]*$

它與最后一個下划線匹配,后跟一個被除下划線以外的任何東西包圍的數字。

如果您想忽略23以外的任何內容,您可以使用[23]而不是\\d

正則表達式

_[^_]*([2-3])[^_]*$

應該做你。 它匹配:

  • _ — 下划線,后跟
  • [^_]* — 除下划線外的零個或多個字符,后跟
  • ([23]) — 十進制數字23 ,后跟
  • [^_]* — 除下划線外的零個或多個字符,后跟
  • $ — 文本結束

您將需要獲得匹配組 #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.

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