如何在文本中仅删除网址,并忽略c#

时间:2019-02-18 05:48:21

标签: c# regex

我只想删除c#中字符串中URL的最后一个实例。

示例字符串:"sample text http://www.url1.com sample text https://www.url2.com sample text http://www.url3.com"

我只想删除"http://url3.com",并将其他URL保留在字符串中。

字符串函数和regex的某种组合会有助于达到相同的目的吗?我尝试了regex,但是它删除了URL的所有实例。

编辑:这涉及匹配最后一个URL(每次都是随机的)并删除i。

@GaurangDave的答案很好

3 个答案:

答案 0 :(得分:0)

我使用通用的Regex模式从文本中查找网址。您可以根据需要进行更改。本示例适用于您的方案。它将删除字符串中的最后一个网址。

string txt = "sample text http://www.url1.com sample" +
             "text https://www.url2.com sample text " +
             "http://www.url3.com";

var matches = Regex.Matches(txt, @"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)");

txt = txt.Replace(matches[matches.Count - 1].Value, string.Empty);

答案 1 :(得分:0)

您可以使用此正则表达式匹配最后一个URL,

http\S*$

并将其替换为空字符串。

Demo1

如果最后一个URL后可以有空格,则可以选择使用此正则表达式进行匹配,

http\S*\s*$

Demo2

如果您想支持更多协议,可以在正则表达式中进行替换,以指定不同的协议,

(?:file|ftp|http)\S*\s*$

Demo3

C#示例代码,

string str = @"sample text http://www.url1.com sample text https://www.url2.com sample text http://www.url3.com";
string replacedStr = Regex.Replace(str, @"(?:file|ftp|http)\S*\s*$", "");
Console.WriteLine("Result: " + replacedStr);

打印

Result: sample text http://www.url1.com sample text https://www.url2.com sample text

答案 2 :(得分:0)

这是一个非正则表达式解决方案,如果您在最后一个URL之后还有多余的文字,该方法也可以使用:

string input = "sample text http://www.url1.com " +
               "sample text https://www.url2.com " +
               "sample text http://www.url3.com " +
               "extra text";
int pos = input.LastIndexOf("http://", StringComparison.InvariantCultureIgnoreCase);
string lastURL = 
    new string(input.Substring(pos).TakeWhile(c => !char.IsWhiteSpace(c)).ToArray());
string output = input.Substring(0, pos) + input.Substring(pos + lastURL.Length);

Console.WriteLine("Last URL: " + lastURL);
Console.WriteLine("Cleaned text: " + output);

输出:

Last URL: http://www.url3.com
Cleaned text: sample text http://www.url1.com sample text https://www.url2.com sample text  extra text