2016-05-17 62 views
-1

子串支票可以說我有一個列表,該列表由鳴叫填充兩個例子如下:有兩種可能性

Tweet 1 = RT @randomuser_: what you saying 
    Tweet 2 = @randomusertwo hello this is a tweet 

正如你可以鳴叫一個和兩個看到有兩種可能,要麼結束與冒號或空間。我現在的實現只允許一次檢查一個,發現下面:

List<string> Tweets = new List<string>(); 
    foreach (var men in Tweets) 
     { 
      int pFrom = men.IndexOf("@") + "@".Length; 
      int pToColon = men.LastIndexOf(":"); 

      //int pToSpace = men.LastIndexOf(" "); 

      string result = mention.Substring(pFrom, pToColon - pFrom); 
      listBox1.Items.Add(result); 
     } 

我如何檢查用戶名提用冒號或空白結束? 編輯:我知道LastIndexOf返回一個整數,不知道如何區分推文但是

+5

你並不需要解析的文本。推文具有「實體」屬性,該實體又包含'user_mentions' – Eser

+2

正如@Eser所示,這是一個XY問題。人們會發布正則表達式作爲答案,你會有被幫助的錯覺(並且我確定那些正則表達式會錯過有效的Twitter句柄的字符,反之亦然),而當你使用C#API時,你可以只需查找相關的推文而無需手動解析推文的文本,而是通過訪問正確的屬性。 – CodeCaster

+0

@CodeCaster - 我明白我可以使用API​​,但是在我的特殊情況下,我只需要在「@」和「」或「:」之間輸入用戶名。 – razki

回答

-3

儘管一些用戶提供了使用API​​的提示,但如果您需要一種方法在文本中查找Twitter用戶名,您可以輕鬆地使用Regex庫。這不是什麼可恥的事情。

var Tweets = new List<string>(); 
Tweets.Add("RT @randomuser_: what you saying [email protected]"); 
Tweets.Add("@randomusertwo hello this is a tweet"); 
var usernames = new List<string>(); 
foreach (var men in Tweets) 
{ 
    var regex = new Regex(@"(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9]+)"); 
    foreach (Match match in regex.Matches(men)) 
    { 
     usernames.Add(match.Value); 
    } 
} 

編輯:排除電子郵件,正則表達式從這個答案抄:regex for Twitter username

+0

投降的人可以解釋爲什麼? –

+1

這根本不完整。例如,它將匹配'foo @ example.com'中的'@ example'。推文可以包含電子郵件地址。至少,你必須添加字邊界錨。 – CodeCaster

+0

@CodeCaster我編輯了答案,現在不包括電子郵件。 –