[英]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.