2015-09-22 45 views
0

我有像數據 -正則表達式 - 第一組1時,第二組多次

06deepaksharma

我需要正則表達式的數據作爲

06>然後倍數來拆分(06個字符)

所以它會像 前2位數然後是多組,每組的長度爲前2位數字。

01DE  >  01 D  E      01 - then 2 group each 1 char length 
02DE  >  02 DE        02 - then 1 group each 2 char length 
02DESH >  02 DE SH      02 - then 2 group each 2 char length 
03DEESHA >  03 DEE SHA      03 - then 2 group each 3 char length 
01DEESHA >  01 D  E  E S H A 01 - then 6 group each 1 char length 

希望現在它清楚我想要什麼。 我不知道如何根據第一組值確定第二組的長度,以及如何定義第二組可能發生N次。

更新下---

所以,如果我們不能應用在第二組的長度那麼我們可以得到所有的可能性,如果我說我解決第二組的長度是多少?

意思是,如果長度將是2字符組

01DE  > 01 DE 
01DEEPAK > 01 DE EP AK 
XXDEEP  > XX DE EP 

所以如果我們說的長度將是2周所有的時間,現在可以得到想要的結果,作爲UPDATED部分

+0

你很清楚你想要什麼,但我不認爲這是可能的。使用[back references](http://www.rexegg.com/regex-capture.html#namedgroups)。 – GolezTrol

+0

我認爲你應該將字符串拆分爲2個部分,然後解析數字並與其他部分的長度進行比較以檢查一致性。這裏的正則表達式可能有點太多(因爲只是每x個字母分割一個字符串)並且太少(在正則表達式中使用長度)。 – Matt

+0

是的,所以要刪除反向引用,如果我修正了第二組的長度。現在我需要分開前兩位數字。然後是多個組,每個2個字符。 –

回答

1

可以達到什麼樣的你在你的問題的開頭描述正則表達式和LINQ:

var input = "03DEESHA"; 
var result = new List<string>(); 
var mtch = Regex.Match(input, @"^(\d+)(.*)"); // Get the Match object with captured texts 
result.Add(mtch.Groups[1].Value);    // Add the number to the resulting list 
var chunks = Regex.Matches(mtch.Groups[2].Value, // Get all chunks 
    string.Format(".{{{0}}}", int.Parse(mtch.Groups[1].Value))) 
      .Cast<Match>() 
      .Select(p => p.Value) 
      .ToList(); 
result.AddRange(chunks); 

正則表達式^(\d+)(.*)個匹配任何數字在一開始(第1組),然後將捕獲單個行字符串的其餘部分(不換行,如果你想支持他們,加RegexOptions.Singleline標誌爲Regex.Match)成組2.

結果上面的代碼執行的:

enter image description here

如果你有一個字符串,其中字母的數量不能由最初的數字,沒有餘數,而不是".{{{0}}}"使用".{{1,{0}}}"

+1

嗯..看起來不錯,我感謝.. ..工作像魅力.. –

1

聲明我不認爲你可以在這裏使用正則表達式,因爲你需要使用具有變量值的back-ref。

然而,你可能會考慮對人物的簡單LINQ:

// first get the number of characters to read 
int num = Convert.ToInt32(myString.Substring(0, 2)); 

// now a simple loop on the characters 
for(int i = 2; i < myString.Length; i += num) result.Add(myString.SubString(i, num); 

或者,如果你真的想要一個正則表達式首先是解析數,然後運用你的正則表達式:

var r = "([a-zA-Z]{" + num + "})"; 
var res = new Regex(r).Split(new string(myString.Skip(2).ToArray())); 
+0

所以刪除後面的參考,如果我修正了第二組的長度。現在我需要分開前兩位數字。然後是多個組,每個2個字符。 –

+0

我試過像上面那樣的正則表達式..但是這只是捕獲最後一個第二組..對於01ABCD - 它將返回01和CD。但我想要01,AB和CD。全部 –

+1

我已經更新了我的答案,仍然在'res'列表中打印出一些空的結果,但是您可以使用'where'過濾器輕鬆地過濾它們。 – HimBromBeere

相關問題