比方說,我有這樣的字符串:Can Regex可以從字符串中提取多個數字嗎?
SORT_123_456
有沒有一種簡單的方法來分析兩個整數值?我不知道這些值有多少個數字。如果我可以驗證其他字符,並放棄解析,如果它們沒有出現在上面(如果它們表明有錯誤),就會很有幫助。
我知道我可以按字符分析字符,但我想知道Regex
是否可以處理這個問題。
我只是沒有真正使用正則表達式。有人能告訴我這是否可以使用Regex
更容易完成?
比方說,我有這樣的字符串:Can Regex可以從字符串中提取多個數字嗎?
SORT_123_456
有沒有一種簡單的方法來分析兩個整數值?我不知道這些值有多少個數字。如果我可以驗證其他字符,並放棄解析,如果它們沒有出現在上面(如果它們表明有錯誤),就會很有幫助。
我知道我可以按字符分析字符,但我想知道Regex
是否可以處理這個問題。
我只是沒有真正使用正則表達式。有人能告訴我這是否可以使用Regex
更容易完成?
SORT_(\d+)_(\d+)
會做到這一點。在使用正則表達式之後,只需提取這兩個組。
如果排序是由其它字remplaced,然後\w+_(\d+)_(\d+)
將做到這一點,如果是完全缺失,(\d+)_(\d+)
將是正則表達式,最後,如果字必須是大寫:[A-Z]+_(\d+)_(\d+)
。
我會嘗試。如果在這種情況下缺少「SORT_」會發生什麼? – 2014-09-03 18:00:23
他想要一個通用的解決方案,使用正則表達式來獲取字符串中的數字。 – 2014-09-03 18:03:23
如果「SORT」丟失,我希望它失敗,因爲這意味着某些事情不像預期的那樣。 – 2014-09-03 18:04:18
如果你想使用這裏的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"
}
事實上,這就是我最終做了這件事,因爲它看起來更簡單,可能更具性能。我已經將Carlier Robin的帖子標記爲答案,只是因爲它更準確地回答了我最初提出的問題。 – 2014-09-03 18:16:07
完全可以理解我只是給你提供了一個不同的方法,因此我們說的皮膚貓的許多方法.. :) – MethodMan 2014-09-03 18:17:32
+1我完全贊成substr/indexof解決方案在這種微不足道的模式。 – 2014-09-03 18:17:33
這是一個簡單的方法是什麼。一個簡單的正則表達式它驗證源字符串和提取並捕獲所有的數字領域,無論這些領域的一些發現:
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()
;
}
將他們永遠是「_」分隔? – 2014-09-03 17:58:12
是的,就像我上面所說的那樣,除了精確的數字。如果它不是「_」分隔的,那麼我只是放棄解析,因爲有些東西是非常錯誤的。 – 2014-09-03 17:59:53
你可以使用split()函數,然後檢查數組中是否有3個元素被加載,如果string [0] =「」那麼你知道單詞'SORT_'丟失了 – MethodMan 2014-09-03 18:06:25