我只想删除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的答案很好
答案 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*$
并将其替换为空字符串。
如果最后一个URL后可以有空格,则可以选择使用此正则表达式进行匹配,
http\S*\s*$
如果您想支持更多协议,可以在正则表达式中进行替换,以指定不同的协议,
(?:file|ftp|http)\S*\s*$
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