2017-02-10 64 views
0

我需要一個字符串,然後刪除它的內容,包括和之後的指定短語,然後返回剩下的最後一個字。 在這種情況下,「更多信息」。刪除一個字符串的內容,包括一個特定的字詞後

基本上,這個腳本應採取串

 "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; 



} 

回答

1

改成這樣:

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

它的工作原理,但它考慮換行符作爲最後一個詞的一部分。爲了解析最後一個單詞的目的,是否有辦法讓換行符與空格相同? –

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; 
} 
相關問題