2014-09-03 109 views
1

比方說,我有這樣的字符串:Can Regex可以從字符串中提取多個數字嗎?

SORT_123_456

有沒有一種簡單的方法來分析兩個整數值?我不知道這些值有多少個數字。如果我可以驗證其他字符,並放棄解析,如果它們沒有出現在上面(如果它們表明有錯誤),就會很有幫助。

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

我只是沒有真正使用正則表達式。有人能告訴我這是否可以使用Regex更容易完成?

+0

將他們永遠是「_」分隔? – 2014-09-03 17:58:12

+0

是的,就像我上面所說的那樣,除了精確的數字。如果它不是「_」分隔的,那麼我只是放棄解析,因爲有些東西是非常錯誤的。 – 2014-09-03 17:59:53

+0

你可以使用split()函數,然後檢查數組中是否有3個元素被加載,如果string [0] =「」那麼你知道單詞'SORT_'丟失了 – MethodMan 2014-09-03 18:06:25

回答

6

SORT_(\d+)_(\d+)會做到這一點。在使用正則表達式之後,只需提取這兩個組。

如果排序是由其它字remplaced,然後\w+_(\d+)_(\d+)將做到這一點,如果是完全缺失,(\d+)_(\d+)將是正則表達式,最後,如果字必須是大寫:[A-Z]+_(\d+)_(\d+)

+0

我會嘗試。如果在這種情況下缺少「SORT_」會發生什麼? – 2014-09-03 18:00:23

+0

他想要一個通用的解決方案,使用正則表達式來獲取字符串中的數字。 – 2014-09-03 18:03:23

+0

如果「SORT」丟失,我希望它失敗,因爲這意味着某些事情不像預期的那樣。 – 2014-09-03 18:04:18

2

如果你想使用這裏的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" 
} 
+0

事實上,這就是我最終做了這件事,因爲它看起來更簡單,可能更具性能。我已經將Carlier Robin的帖子標記爲答案,只是因爲它更準確地回答了我最初提出的問題。 – 2014-09-03 18:16:07

+0

完全可以理解我只是給你提供了一個不同的方法,因此我們說的皮膚貓的許多方法.. :) – MethodMan 2014-09-03 18:17:32

+2

+1我完全贊成substr/indexof解決方案在這種微不足道的模式。 – 2014-09-03 18:17:33

1

這是一個簡單的方法是什麼。一個簡單的正則表達式它驗證源字符串提取並捕獲所有的數字領域,無論這些領域的一些發現:

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() 
      ; 
}