簡體   English   中英

正則表達式可以從字符串中提取多個數字嗎?

[英]Can Regex Extract Multiple Numbers from String?

假設我有一個類似的字符串:

SORT_123_456

有沒有簡單的方法來解析兩個整數值? 我不知道這些值將有多少個數字。 如果我可以驗證其他字符,並且如果它們沒有像我上面顯示的那樣出現,則放棄分析,這也將有所幫助(這表明出現了問題)。

我知道我可以逐個字符地解析,但是我想知道Regex是否可以處理這個問題。

我只是沒有真正使用過正則表達式。 有人可以告訴我使用Regex是否可以更輕松地完成此操作?

SORT_(\\d+)_(\\d+)將執行此操作。 使用正則表達式后只需提取兩組即可。

如果用另一個單詞替換SORT,則\\w+_(\\d+)_(\\d+)會這樣做,如果完全丟失,則(\\d+)_(\\d+)將是正則表達式,最后,如果單詞必須大寫: [AZ]+_(\\d+)_(\\d+)

如果您想要使用Split()函數的示例,則可以這樣做

var splitStr = "SORT_123_456";
var sortable = splitStr.Split('_');
if (sortable[0].Contains("SORT"))
{
    //do your sorting logic because you have a sortable 
    sortable[1] //will be "123"
    sortable[2] //will be "456"
}

或者您可以檢查string.Empty

var splitStr = "SORT_123_456";
var sortable = splitStr.Split('_');
if (!sortable[0] == string.Empty)
{
    //do your sorting logic because you have a sortable 
    sortable[1] //will be "123"
    sortable[2] //will be "456"
}

這是簡單的方法。 一個簡單的正則表達式。 它會驗證源字符串, 提取和捕獲所有數字字段,而與找到的此類字段的數量無關:

string src = @"SORT_123_456_789" ;
Regex  rx = new Regex( @"^SORT(_\d+)*$" ) ;
Match  match = rx.Match( src ) ;

if ( !match.Success ) throw new InvalidOperationException() ;

int[] values = null ;
if ( match.Success )
{
  values = match
          .Groups[1]
          .Captures
          .Cast<Capture>()
          .Select( c => int.Parse( c.Value.Substring(1) ) )
          .ToArray()
          ;
}

暫無
暫無

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

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