2017-05-26 86 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

相关问题