正则表达式:区分句尾和url中的句号
本文关键字:url 正则表达式 | 更新日期: 2023-09-27 18:08:26
我正在构建一个应用程序,搜索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字符