10

가능한 중복 :

여러 공간을 C #의 단일 공간으로 바꾸려면 어떻게합니까?

문자열에서 공백을 제거하는 가장 우아한 방법은 무엇입니까?" a<many spaces>b c "으로"a b c". 따라서 반복되는 공백이 하나의 공간으로 축소됩니다.


  • @naveen, 당신이 링크하는 질문은 문자열 주변의 공간을 다루지 않습니다. - Lucero
  • @ 루세로 : 항상 있습니다..Trim()그에 대한. :) - naveen
  • @naveen, 요점은 다르다는 것입니다. 정규식과 트림을 사용하는 방법을 알고 있다면 질문은 필요하지 않습니다. - Lucero
  • @Lucero 전혀 다르지 않다. - Cristian Toma

9 답변


12

너는 사용할 수있어.Regex이것을 위해 :

Regex.Replace(my_string, @"\s+", " ").Trim();


  • 좋아, 그럼 왜 대답 해 줄 수 있겠 니? 답은 순식간에 해결할 수있다. 아무런 요점도 없다. - Cristian Toma
  • @ 토마스 크리스티안 : 몇 가지 다른 정답이 있기 때문에. 어리석은 모두가가는 방법과 그들의 것을 편집해라. .. 꽤 절름발이의 IMO. 처음으로 잘못 읽은 경우 삭제하십시오. - leppie
  • @ 루세로 : 그러나 RegEx를이 항목과 비교할 때 간단한 Trim ()이 더 좋지 않은지 궁금합니다. 그리고 난 가독성과 유지 보수성면에서 더 좋습니다. - Henk Holterman
  • @leppie이 사이트의 요점은 다른 사람들을 돕고 두 번째로 자신에 대한 평판을 얻는 것입니다. 사람들이 대답을 편집하는 것이 도움이 필요한 사람을 돕는 것입니다. 평판 사냥꾼처럼 생각한다면 ... #39 너의 문제 야! - Cristian Toma
  • @HenkHolterman, 일부 정규식은 엉망이되지만이 것은 아닙니다. 적은 정규식 지식으로 쉽게 읽고 이해할 수 있습니다. 또한, 정규 표현식은 내부적으로 효율적인 오토마타로 변환되기 때문에 그 성능은 "더 간단한" 공백을 붕괴하기위한 정규 표현식을 사용하고 더 나은 성능을 위해 정규 표현식을 컴파일 할 수도 있습니다. - Lucero

14

정규식 승 / 정규식없는 솔루션 :

char[] delimiters = new char[] { ' '};   // or null for 'all whitespace'
string[] parts = txt.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
string result = String.Join(" ", parts);


  • 정규식 솔루션과 달리\s공백으로 분류 된 다른 문자가 아닌 공백 (U + 0020) 문자 만 제거합니다. 이것은 Q의 기준에 부합하지만 실제로는 그러한 요구가 탭 등에도 적용될 것으로 기대합니다. - Richard
  • @ 리차드 : OP는 구분 기호로 미세 조정할 수 있습니다. var. 그리고delimiters = null~에 해당\s - Henk Holterman
  • 나는 항상 복잡하고 비교적 비싼 문자열 연산이 많은 간결한 정규 표현식보다 선호되는 이유에 대해 (이 질문 에서처럼) 궁금해합니다. 저의 좌우명은 작업을 수행하는 데 올바른 도구를 사용하는 것이고 정규 표현식은 "간단한"작업을 위해 정확하게 설계된 도구였습니다. 텍스트 정규 표현의 패턴 일치. (헨크, 제 잘못 이해하지 마세요. 나는 당신의 대답을 전혀 비난하지 않습니다. 그러나 많은 사람들이 정규 표현식을 배우고 그들이 사용하는 곳을 사용하는 것에 대한 변명을 이해하지 못합니다. 집에서 "- regexes와 함께 전체 파서 또는 숫자 유효성 검사기를 만들지는 않으므로 명확한 한계가 있음을 유의하십시오.) - Lucero
  • @ 루체로 사실. 사람들은 정규식이나 공포증이 있어야합니다. 이온 덴의 대답은 하나의 간결한 라인이며이 3 개의 못생긴 라인보다 적은 upvotes을 가지고 있습니다 .... - Peter C
  • @ alpha123, 또는 의도적으로 추가하지 않은 헨크의 업 보턴의 절반을 가지고있는 광산Trim()믹스로하지만 모든 것을 할 정규식을 사용합니다. (나는 그다지 관심이 없다. 나는 오늘 몇 시간 전에 200 명의 담당자를 봉쇄했다 ...) - Lucero

8

Regex.Replace(my_string, @"^\s+|\s+$|(\s)\s+", "$1");


  • +1 나는 그것을 좋아한다. 하지만 내 후배 프로그래머 중 몇 명이 그것을 이해할 수 있을지 궁금해. :) - naveen
  • 일부 정규식 기본 사항을 아는 것은 중요한 기술 IMHO입니다. 특히 클라이언트 측 웹 개발자 (많은 후배가 할 일)의 도구 세트에도 포함되어 있기 때문에 중요합니다. 그래서 그들이 그것을 이해하지 못한다면, 단지 그것을 찾아야 만합니다 ... 정규식 초보자 IMHO에 의해 해부하기에는 너무 복잡하지 않습니다. - Lucero
  • 확실히 알아낼 수는 있지만, 정규식 지식을 사용하더라도 정신 분석에 시간이 필요합니다. 버전의 정규 표현식.Trim()훨씬 더 간결하므로 유지 관리가 더 쉽습니다. (나는 downvoting하지 않는다. -이 버전할 수있다약간의 상황에서 선호 될 수 있습니다. - Izkata
  • @downvoter, 직접 설명해주세요! - Lucero

4

사용Trim문자열의 처음과 끝에서 공백을 제거하는 메소드와 여러 공백을 줄이는 정규 표현식 :

s = Regex.Replace(s.Trim(), @"\s{2,}", " ");


2

너는 할 수있어.

Regex.Replace(str, "\\s+", " ").Trim()

http://msdn.microsoft.com/en-us/library/e7f5w83z.aspx


0

        Regex rgx = new Regex("\\s+");
        string str;
        str=Console.ReadLine();
        str=rgx.Replace(str," ");
        str = str.Trim();
        Console.WriteLine(str);


0

정규식을 사용하십시오.

"( ){2,}" //Matches any sequence of spaces, with at least 2 of them

그것을 사용하여 모든 성냥을 ""(으)로 대체하십시오.

나는 C #으로 해본 적이 없으며 문서가 말하는 것을 알아 내기 위해 더 많은 시간이 필요하므로 직접 찾아야합니다. 미안 해요.


0

정규식 사용

String test = " a    b c ";
test = Regex.Replace(test,@"\s{2,}"," ");
test = test.Trim();

이 코드는 2 개 이상의 공백을 하나의 공백으로 대체합니다.Regex처음부터 끝까지 제거하십시오.


  • 귀하의 정규식은 실제로 단지 정확히 두 개의 공백을 하나로 대체합니다. 그것은해야한다\s{2,}또는\s\s+또는\s+임의의 수의 공백을 공백으로 대체하려는 경우 (이후\s탭과 같은 문자를 포함하여 모든 공백과 일치합니다. 결과는 다릅니다.) - Lucero
  • @ 루체로 당신은 맞습니다.하지만 각 그룹을 하나의 그룹으로 선택하기 때문에 일할 것입니다. 그래서 우리는 4 개의 공백이있어서 그룹을 교체해야한다는 것을 의미합니다. - Amir Ismail
  • 수정이 이제는 작동하지만 2 개의 그룹이 출력에서 두 개의 공백으로 대체되기 전에 출력이 입력으로 다시 처리되지 않습니다. - Lucero

0

Regex.Replace(str, "[\s]+"," ")

그런 다음 Trim을 호출하여 선행 및 후행 공백을 없앱니다.

연결된 질문


관련된 질문

최근 질문