일반 표현식을 사용하여 접두사 문자를 사용하여 분할하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/500031

  •  20-08-2019
  •  | 
  •  

문제

예제 문자열을 분할하고 싶습니다.

~ Peter ~ Lois ~ Chris ~ Meg ~ Stewie

캐릭터에 ~ 그리고 결과를 얻으십시오

베드로
로이스
크리스
메그
스튜키

JavaScript 또는 C#에서 표준 문자열 분할 함수를 사용하여 첫 번째 결과는 물론 빈 문자열입니다. 첫 번째 결과가 실제로 빈 문자열 일 수 있으므로 첫 번째 결과를 무시하지 않아도됩니다.

나는 정규 표현을 사용하는 데 충실 해졌고 나는 그루터기에 걸렸다. 나는 누군가가 이에 대한 우아한 해결책을 발견했다고 확신합니다.

도움이 되었습니까?

해결책

귀하의 요구 사항에 대해서는 두 가지 옵션이 있습니다.

(1) 존재하는 경우 초기 접두사 문자를 제거하십시오.

(2) 전체 정규 표현식을 사용하여 문자열을 분리하십시오.

둘 다이 코드에 설명되어 있습니다.

using System;
using System.Linq;
using System.Text.RegularExpressions;

class APP { static void Main() {

string s = "~Peter~Lois~Chris~Meg~Stewie";

// #1 - Trim+Split
Console.WriteLine ("[#1 - Trim+Split]");
string[] result = s.TrimStart('~').Split('~');
foreach (string t in result) { Console.WriteLine("'"+t+"'"); }

// #2 - Regex
Console.WriteLine ("[#2 - Regex]");
Regex RE = new Regex("~([^~]*)");
MatchCollection theMatches = RE.Matches(s);
foreach (Match match in theMatches) { Console.WriteLine("'"+match.Groups[1].Value+"'"); }

// #3 - Regex with LINQ [ modified from @ccook's code ]
Console.WriteLine ("[#3 - Regex with LINQ]");
Regex.Matches(s, "~([^~]*)")
    .OfType<Match>()
    .ToList()
    .ForEach(m => Console.WriteLine("'"+m.Groups[1].Value+"'"))
    ;
}}

#2의 정규 표현식은 구분 기호 문자와 0 이상의 비 텔리즘 문자를 포함하는 성냥 그룹과 일치합니다. 결과 일치는 구분 된 문자열 (빈 줄 포함)입니다. 각 경기마다 "match.value"는 선행 구분 기 및 "match.groups를 포함한 전체 문자열입니다.1.Value "는 Delimiter Free String을 포함하는 첫 번째 경기 그룹입니다.

완전성을 위해, 세 번째 인코딩 ( #3)은 #2에서 동일한 정규 표현 방법을 보여 주지만 LINQ 코딩 스타일로 포함됩니다.

정규 표현으로 어려움을 겪고 있다면 강력히 권장합니다. Jeffrey EF Friedl의 정규식 마스터 링, 제 3 판. 그것은 정기적 인 표현을 이해하는 데 가장 도움이되며 나중에 필요에 따라 훌륭한 참조 또는 리프레셔 역할을합니다.

다른 팁

C#에서 이것은 당신이 원하는 것을 얻는 것 같습니다.

"~Peter~Lois~Chris~Meg~Stewie".Split("~".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

여기 LINQ 접근 방식이 있습니다 ...

regexoptions.explicitcapture를 사용하면 일치가 포함되지 않습니다. 그것 없이는 '~'도 포함됩니다.

using System;
using System.Linq;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "~Peter~Lois~Chris~Meg~Stewie";
            Regex.Split(s, "(~)", RegexOptions.ExplicitCapture)
                .Where(i=>!String.IsNullOrEmpty(i))
                .ToList().ForEach(i => Console.WriteLine(i));
            Console.ReadLine();
        }
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top