簡體   English   中英

使用 C# 獲取字符串的一部分

[英]Get a part of a String using C#

我必須得到一小段字符串,如下所示:

20T41

總是兩個數字,一個字母和一個數字。

但是我有許多不同的鏈,如下所示

  • PNC 20T17
  • PNC 19T1391
  • PNC 19T1456
  • NC - 19T1099分體
  • PNC 19T323 - 無操作。
  • 19T1512 不規律的

我已經使用了一些這樣的代碼,但我不知道如何為每種情況做到這一點。 我認為這比使用許多 IF 更好。

str = str.Substring (0, str.LastIndexOf ('/') + 1);

黑色標記的是我想要得到的字符串。 我正在考慮做點什么,但這效率不高。 你建議怎么做?

您可以嘗試在正則表達式的幫助下匹配片段:

using System.Text.RegularExpressions;

...

str = Regex.Match(str, "[0-9]{2}T[0-9]+").Value;

或者在任何(不是必需的T )大寫字母的情況下可以出現:

str = Regex.Match(str, "[0-9]{2}[A-Z][0-9]+").Value;

以下正則Regex也將有所幫助

var regex = new Regex("\\d{2}\\w\\d+");
var input = new List<string>()
    {"PNC 20T17", "PNC 19T1391", "P.N.C 19T1456,", "NC - 19T1099", "PNC 19T323", "19T1512."};

foreach (var item in input)
{
    var match = regex.Match(item);
    Console.WriteLine(match);
}

它產生以下輸出

20T17
19T1391
19T1456
19T1099
19T323
19T1512

你可以看一下quick reference ,看看里面每個class的意思

  • \\d{2}十進制數字,精確兩倍
  • \\w任何單詞字符,大寫與否
  • \\d+十進制數字一次或多次。 您可以將其更改為\\d{1,}\\d{2,} 這意味着匹配數字至少一兩次,沒有上限,這在 OP 中沒有指定。 或使用上限,如\\d{1,9}

如果您提供的示例都是組合,那么LastIndexOfSubstring將完成工作;

var yourInput = "P.N.C 19T1456";
var res = yourInput.Substring(yourInput.LastIndexOf(' ') + 1) ;

暫無
暫無

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

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