[英]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.