繁体   English   中英

正则表达式:句子末尾和URL中的区分句

[英]Regex: Differentiating periods at end of sentence and in URLS

我正在构建一个应用程序,该应用程序在文本中搜索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]);
                }
            } 
        }

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

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*)?$

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

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

/b在单词边界上匹配。 它将匹配退货,空格,EOF等。

句子结尾的句号后通常是普通英语的空格。 但是,如果句点在英语表示形式的结尾,则可以跟在其他字符之后,例如EOF字符,“ <”,引号等。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM