删除一个字符串的内容,包括一个特定的字词后

问题描述:

我需要一个字符串,然后删除它的内容,包括和之后的指定短语,然后返回剩下的最后一个字。 在这种情况下,“更多信息”。删除一个字符串的内容,包括一个特定的字词后

基本上,这个脚本应采取串

 "Please visit 

this 
website 
for more information if you have questions" 

,并返回字"for"

(注意,这仅仅是一个例子,该字符串可能是任何东西,我把它搞砸了换行符故意这是因为这是看起来是一半的时间。)

下面的split方法的工作原理,返回最后一个单词,但substring方法不起作用。

任何想法我做错了什么?

public static string InfoParse(string input) 


{ 
    string extract = input; 


    extract = input.Substring(0, input.IndexOf("more information")); 


    extract = extract.Split(' ').Last(); 

    return extract; 



} 

改成这样:

public static string InfoParse(string input) 
    { 
     //string extract = input; 
     string extract = input.Substring(0, input.IndexOf("more information")); 
     extract = extract.Split(new string[] {" ", "\r\n", "\r", "\n"}, StringSplitOptions.RemoveEmptyEntries).Last(); 
     return extract; 
    } 

或这显示什么是你的代码错误:

public static string InfoParse(string input) 
{ 
    //string extract = input; 
    string extract = input.Substring(0, input.IndexOf(" more information")); 
    extract = extract.Split(' ').Last(); 
    return extract; 
} 

你split返回进入后的最后一个空格,最后空间恰好是“更多信息”之前的空格 - >因此它返回一个空字符串

编辑:现在也有断行

+0

第一个显然是更强大的(考虑到他们的“搞砸了换行等”),最好不要上一致空白要么算。 – dlatikay

+0

这是对的,只是想显示原始问题的确切问题 - 来源 – Pedro

+0

它的工作原理,但它考虑换行符作为最后一个词的一部分。为了解析最后一个单词的目的,是否有办法让换行符与空格相同? –

您可以使用正则表达式:

using System.Text.RegularExpressions; 

string InfoParse(string input, string word) 
{ 
    Match m = Regex.Match(input, @"\s?(?<LastBefore>\w+)\s+" + word, RegexOptions.Singleline); 
    if (m.Success) 
     return m.Groups["LastBefore"].Value; 
    return null; 
}