正则表达式:在句子结尾和URLS中区分句点

时间:2013-04-10 02:57:53

标签: c# regex

我正在构建一个搜索文本以查找网址的应用,并将网址添加到列表框中。我有一些工作,但如果他们结束句子,我有什么不能拿起网址(例如:这是www.google.com。)。提前致谢

这是我的代码:

private void btnExtract_Click(object sender, EventArgs e)
        {
            StringBuilder taintedStr = new StringBuilder(txtInputText.Text);
            string cleanStr;

            taintedStr.Replace(",", "");
            taintedStr.Replace("!", "");
            taintedStr.Replace("(", "");
            taintedStr.Replace(")", "");
            taintedStr.Replace("[", "");
            taintedStr.Replace("]", "");
            taintedStr.Replace("http://", "");
            cleanStr = taintedStr.ToString();
            string[] wordlist = Regex.Split(cleanStr, @"\s");

            for (int i = 0; i < wordlist.Length; i++)
            {
                bool test = Regex.Match(wordlist[i], @"^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$").Success;  
                if (test == true)
                {
                    lstWebsites.Items.Add("http://" + wordlist[i]);
                }
            } 
        }

3 个答案:

答案 0 :(得分:2)

为什么不通过添加一行来从每个单词中删除结尾标点符号来调整代码?例如:

for (int i = 0; i < wordlist.Length; i++)
{
  wordlist[i] = wordlist[i].Trim().TrimEnd('.').TrimEnd('!').TrimEnd('?');
  bool test = Regex.Match(wordlist[i], @"^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$").Success;  
  if (test == true)
  {
    lstWebsites.Items.Add("http://" + wordlist[i]);
  }
} 

或者,以下RegEx应该抓住网站:

^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}[.!?]?(/\S*)?$

答案 1 :(得分:0)

你必须决定如何在你的代码中使用它,但基本上你只想为此添加一个特殊情况。 ".[a-zA-Z]{2,3}(/\S*)?$.\b"将与.*.匹配。如果是这种情况,那么使用do;

 myString = myString.TrimeEnd('.'); // remove the last character

/b匹配单词边界。它将匹配返回,空格,EOF等。

答案 2 :(得分:0)

句子末尾的句号通常后面是正常英语的空格。但如果句号结束时表示英语,则可能会跟随其他字符,例如EOF字符,“&lt;”,引号等。

解决此问题的方法是识别句点后面是否有有效的网址字符。