1

我正在构建一个在文本中搜索 url 并将 url 添加到列表框的应用程序。我有一些工作,但是如果它们结束了句子,我无法获取 URL(例如:这是 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]);
                }
            } 
        }
4

3 回答 3

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*)?$
于 2013-04-10T03:12:22.820 回答
0

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

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

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

于 2013-04-10T03:12:47.183 回答
0

在普通英语中,句尾的句号通常跟在空格后面。但如果句点位于英语表示的末尾,则它后面可能会跟随其他字符,例如 EOF 字符、“<”、引号等。

解决此问题的方法是识别句点后跟有效 url 字符的时间。

于 2013-04-10T03:13:15.157 回答