2017-05-26 66 views
-1

我想使用C#從單個字符串中提取所有出現的模式爲子空間的字符串:空格後跟任意文本。查找出現匹配模式的所有子串

因此,舉例來說,如果我有一個字符串「This is a very short sentence」話,我希望能夠獲得5根弦:

「is a very short sentence」 
「a very short sentence」 
「very short sentence」 
「short sentence」 
「sentence」 

從上面的子串的例子中不應該包含前導空格。也能夠通過索引訪問每個獲得的字符串會很好。

我試圖使用正則表達式,但我無法繞過第一場比賽。

請幫

+0

你爲什麼要使用正則表達式,爲什麼不使用split和寫一個循環生成排列? – degant

+2

你試過拆分嗎? –

+0

簡單的僞代碼:1.找到從S開始的下一個空格W 2.從字符串W開始直到字符串結束。 3. S = W + 1 4.轉到步驟1,直到找不到下一個空格。作爲你的家庭作業,我將離開實施。 – Euphoric

回答

3

使用Split和一些Linq

string text2 = "This is a very short sentence"; 

// Get all words except first one 
var parts = text2.Split(' ').Skip(1); 

// Generate various combinations 
var result = Enumerable.Range(0, parts.Count()) 
    .Select(i => string.Join(" ", parts.Skip(i))); 
+0

它的工作原理,謝謝 – Lukasz

1

請與循環和子字符串方法一試:

string inputStr = "This is a very short sentence"; 
List<string> subStringList = new List<string>(); 

while(inputStr.IndexOf(' ')!=-1) 
{ 
    inputStr= inputStr.Substring(inputStr.IndexOf(' ')+1); 
    subStringList.Add(inputStr); 
} 


Console.WriteLine(String.Join("\n",subStringList)); 

Working Example

+0

@degant解決方案更好 – 2017-05-26 05:51:49

+0

@ anete.anetes:當然,但是這是一個倒票的原因? –

+0

是的。因爲如果我在製作中看到這個,我會強迫你用@degant風格重寫它。 – 2017-05-26 05:55:51

相關問題