2016-05-17 30 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我编辑了答案,现在不包括电子邮件。 –