문자열에서 특정 문자 다음에 나오는 문자를 제거한 다음 하위 문자열을 제거 하시겠습니까?


140

나는 이것이 단순한 것처럼 보이고 문자열 / 문자 / 정규 표현식에 많은 질문이있을 때 이것을 게시하는 바보 같은 느낌이 들지만, 내가 필요한 것을 찾을 수 없었습니다 (다른 언어를 제외하고 : 특정 포인트 후 모든 텍스트 제거 ).

다음 코드가 있습니다.

[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에서 쿼리 문자열을 제거하려면 어떻게해야합니까?

답변:


265

문자열 조작의 경우? 뒤에 모든 것을 죽이려면이 작업을 수행 할 수 있습니다

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을 사용하고 있으므로이 코드와 같은 방법으로 URL을 사용할 수 있습니다

System.Uri uri = new Uri("http://www.somesite.com/what/test.aspx?hello=1");
string fixedUri = uri.AbsoluteUri.Replace(uri.Query, string.Empty);

1
아니면 마지막 /입니까?
Charlie Salts

4
그래, 다시 읽어봐 이 경우 LastIndexOf ( "/")를 수행 할 수 있습니다.
Anthony Pegram

1
이 작업을 수행하는 두 가지 방법을 제공 한 x2에게 감사합니다!
SventoryMang

1
이 경우 @gsvirdi를 사용하여 해당 URL을에로드 Uri uri한 다음에 액세스 할 수 있습니다 uri.Segments. 그러면 배열이 반환되고 "somepage.aspx"가 마지막 항목이됩니다.
Anthony Pegram

1
나는 까다 롭지 만 색인> = 0이어야합니까?
Jenny O'Reilly

103

첫 번째 전에 모든 것을 제거하려면 /

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);

7
문자열에 "/"가 포함되어 있지 않으면 이것들이 모두 예제를 던집니다. 원래 질문과 같이 하드 코딩 된 문자열로 작업하는 경우 분명히 문제가되지 않지만 대부분의 경우이를 고려하고 싶을 것입니다.
Elezar

7

여기 또 다른 간단한 해결책이 있습니다. 다음 코드는 '|'앞의 모든 것을 반환합니다. 캐릭터:

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

실제로 원하는만큼 많은 구분 기호를 가질 수 있지만 분리 문자가 하나만 있다고 가정하면 '|'다음에 모든 것을 얻는 방법은 다음과 같습니다.

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

(두 번째 코드에서 변경된 것은 배열의 인덱스였습니다.)


6

Uri 클래스는 일반적으로 Urls 조작에 가장 적합한 방법입니다.


7
링크의 예가 좋을 것입니다.
Trevor

1

특정 문자 전에 모든 것을 제거하려면 아래를 사용하십시오.

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

이것이하는 일은 $ char 앞에 모든 것을 가져 와서 제거하는 것입니다. 이제 문자 다음에있는 항목을 제거하려면 +1을 -1로 변경하면됩니다.

그러나 URL의 경우 기본 제공 .NET 클래스를 사용하여이를 수행합니다.


1

Request.QueryString 당신이 얻을 수 있도록 parameters 포함 된 및 값 .URL

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

customername 변수는 dave와 같아야합니다

문안 인사


0

나는 두 번째 Hightechrider : 이미 당신을 위해 만들어진 특수한 Url 클래스가 있습니다.

그러나 PHP의 replaceAll은 검색 패턴에 정규식을 사용하므로 .NET에서도 할 수 있습니다. RegEx 클래스를 살펴보십시오.


0

.NET의 내장 메소드를 사용하여 .NET을 제거 할 수 있습니다 QueryString. 즉,Request.QueryString.Remove["whatever"];

여기서 []의 어떤 것이든지querystring 제거하려는 이름입니다 .

이것을 시도하십시오 ... 이것이 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.