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

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

다음 코드가 있습니다.

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



답변

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

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


답변

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

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


답변

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

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

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

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

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


답변

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


답변

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

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

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

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


답변

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

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

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

문안 인사


답변

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

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