Удалить символы после определенного символа в строке, а затем удалить подстроку? - PullRequest
122 голосов
/ 18 апреля 2010

Я чувствую себя немного глупо, когда пишу это, когда это кажется довольно простым, и есть множество вопросов о строках / символах / регулярных выражениях, но я не могу найти то, что мне нужно (за исключением другого языка: Удалить все Текст после определенного пункта ).

У меня есть следующий код:

[Test]
    public void stringManipulation()
    {
        String filename = "testpage.aspx";
        String currentFullUrl = "http://localhost:2000/somefolder/myrep/test.aspx?q=qvalue";
        String fullUrlWithoutQueryString = currentFullUrl.Replace("?.*", "");
        String urlWithoutPageName = fullUrlWithoutQueryString.Remove(fullUrlWithoutQueryString.Length - filename.Length);

        String expected = "http://localhost:2000/somefolder/myrep/";
        String actual = urlWithoutPageName;
        Assert.AreEqual(expected, actual);
    }

Я попробовал решение в вопросе выше (надеясь, что синтаксис будет тот же!), Но нет. Я хочу сначала удалить queryString, который может иметь любую переменную длину, а затем удалить имя страницы, которая снова может быть любой длины.

Как получить строку запроса удаления из полного URL-адреса, чтобы этот тест прошел?

Ответы [ 8 ]

228 голосов
/ 18 апреля 2010

Для манипуляции со строками, если вы просто хотите убить все после?, Вы можете сделать это

string input = "http://www.somesite.com/somepage.aspx?whatever";
int index = input.IndexOf("?");
if (index > 0)
   input = input.Substring(0, index);

Изменить: Если все после последней косой черты, сделать что-то вроде

string input = "http://www.somesite.com/somepage.aspx?whatever";
int index = input.LastIndexOf("/");
if (index > 0)
    input = input.Substring(0, index); // or index + 1 to keep slash

С другой стороны, поскольку вы работаете с URL-адресом, вы можете сделать с ним что-то вроде этого кода

System.Uri uri = new Uri("http://www.somesite.com/what/test.aspx?hello=1");
string fixedUri = uri.AbsoluteUri.Replace(uri.Query, string.Empty);
87 голосов
/ 22 сентября 2014

Удалить все до первого /

input = input.Substring(input.IndexOf("/"));

Чтобы удалить все после первого /

input = input.Substring(0, input.IndexOf("/") + 1);

Чтобы удалить все до последнего /

input = input.Substring(input.LastIndexOf("/"));

Чтобы удалить все после последнего /

input = input.Substring(0, input.LastIndexOf("/") + 1);

Еще более простым решением для удаления символов после указанного символа является использование метода String.Remove () следующим образом:

Удалить все после первого /

input = input.Remove(input.IndexOf("/") + 1);

Чтобы удалить все после последнего /

input = input.Remove(input.LastIndexOf("/") + 1);
6 голосов
/ 18 апреля 2010

Класс Uri, как правило, является лучшим выбором для манипулирования URL-адресами.

2 голосов
/ 26 января 2019

Вот еще одно простое решение. Следующий код вернет все до '|' характер:

if (path.Contains('|'))
   path = path.Split('|')[0];

На самом деле, вы можете иметь столько разделителей, сколько хотите, но при условии, что у вас есть только один символ разделения, вот как вы получите все после '|':

if (path.Contains('|'))
   path = path.Split('|')[1];

(Все, что я изменил во втором фрагменте кода, был индекс массива.)

1 голос
/ 16 декабря 2014

Request.QueryString помогает получить parameters и значения, включенные в URL

пример

string http = "http://dave.com/customers.aspx?customername=dave"
string customername = Request.QueryString["customername"].ToString();

поэтому переменная customername должна быть равна dave

1011 * привет *

1 голос
/ 16 сентября 2014

Чтобы удалить все до определенного символа, используйте ниже.

string1 = string1.Substring(string1.IndexOf('$') + 1);

Что это делает, берет все перед $ char и удаляет его. Теперь, если вы хотите удалить предметы после персонажа, просто измените +1 на -1 и все готово!

Но для URL я бы использовал встроенный класс .NET для этого.

0 голосов
/ 09 апреля 2014

Вы можете использовать встроенный метод .NET для удаления QueryString. т.е. Request.QueryString.Remove["whatever"];

здесь независимо от того, в [] - это имя querystring, которое вы хотите удалить.

Попробуйте это ... Я надеюсь, что это поможет.

0 голосов
/ 18 апреля 2010

Я второй Hightechrider: для вас уже создан специализированный класс Url.

Я также должен отметить, что PHP replaceAll использует регулярные выражения для шаблона поиска, что также можно делать в .NET - посмотрите на класс RegEx.

...