Как удалить только URL-адрес из текста и игнорировать другие URL-адреса в C # - PullRequest
0 голосов
/ 18 февраля 2019

Я хотел бы удалить только последний экземпляр URL в строке в c #.

Пример строки: "sample text http://www.url1.com sample text https://www.url2.com sample text http://www.url3.com"

Я хотел бы удалить только "http://url3.com", иоставьте другой URL в строке.

Поможет ли некоторое сочетание строковых функций и регулярных выражений достичь того же?Я попытался регулярное выражение, но он удаляет все экземпляры URL.

Редактировать: это включает сопоставление последнего URL (который является случайным каждый раз) и удаление i.

@ GaurangDave ответ работал хорошо

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

Вы можете сопоставить последний 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
0 голосов
/ 18 февраля 2019

Вот решение без регулярных выражений, которое также работает, если у вас есть дополнительный текст после последнего 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
0 голосов
/ 18 февраля 2019

Я использовал общий шаблон Regex, чтобы найти URL из текста.Вы можете изменить в соответствии с вашими потребностями.Этот пример работает для вашего сценария.Это удалит последний URL из строки.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...