2017-11-15 6 views
1

Split() 메서드를 사용하여 string을 정규식으로 분할합니다.분할 조건 문자를 제거하지 않고 C# Regex split()

var splitRegex = new Regex(@"[\s|{]"); 

string input = "/Tests/ShowMessage { 'Text': 'foo' }"; 

//second version of the input: 
//string input = "/Tests/ShowMessage{ 'Text': 'foo' }"; 

string[] splittedText = splitRegex.Split(input, 2); 

string은 입력 샘플 패턴 일뿐입니다. { 앞에 공백이 있거나 공백없이 한 번 공백이있는 input의 두 가지 구조가 있습니다.

  • /테스트/ShowMessage
  • { '텍스트': '푸'}

가 있으면 나는 다음과 같은 결과를 얻기 위해 { 브래킷의 input을 분할 할 공간, 문자열이 거기에 splitted 도착 (공간이 제거되면) 내 원하는 결과를 얻을. 하지만 거기에 공간이 없다면 {에 문자열을 나눠서 {이 제거되면서 내가 원하는 것은 없다. 분할 조건 문자를 제거하지 않고 Regex.Split()을 어떻게 사용할 수 있습니까?

+4

['@ "\ s * (? = {)"'] (https://ideone.com/QASSyI)를 사용하십시오. –

답변

3

대괄호는 문자 집합을 작성하므로 문자 집합과 정확하게 일치해야합니다. 당신의 욕망은 그들을 제거함으로써 시작하십시오.

은 그래서 당신이 *을 추가 할 필요가 공백의 임의의 수를에 맞게, 결과는 이것 \s*입니다.

  • \s는 공백
  • *이 제로 또는-더는 분할 조건 문자를 제거하지 않는 것이이

, 당신이 내다 주장 (?=...)을 사용할 수를 의미합니다.

  • (?=...) 또는 (?!...)

결합 Regex이처럼 보이는 내다 주장이다 \s*(?={)

This는 모든 다른 Regex 부분의 정말 좋은 자세한 설명서입니다, 당신은있을 수 있습니다 그것을 봐라. 또한 을 쉽고 무료로 here에 테스트 할 수 있습니다.

0

경기에서 중괄호를 포함하지 순서에서는 앞서 살펴에 넣어 수 있습니다

\s*(?={) 
오픈 중괄호 전에 위치까지 공백의 수와 일치합니다

.

+0

정확히 내가 무엇을 찾고 있었습니까. 그러나'[]'는 정규 표현식에 어떤 영향을 줍니까? 이 특정한 경우에는 그것을 이해하지 못했습니다. –

+0

파이프 문자 덕분에 문자열을 지나치게 분할하지 않습니까? –

+0

@ L.Guthardt 대괄호는 문자 집합을 만들기위한 것입니다. 그래서'[\ s | {]'는 실제로 파이프 문자 나 열린 중괄호와 공백을 매치합니다. – juharr

0

당신은 "{"에 일반 문자열 분할을 사용할 수 있고, 공간을 트림 : 당신이 정규식 경로를 사용하려는 경우에는 정규식을 약간 변경하는 경우

var bits = "/Tests/ShowMessage { 'Text': 'foo' }".Split("{", StringSplitOptions.RemoveEmptyEntries); 
bits[0] = bits[0].TrimEnd(); 
bits[1] = "{" + bits[1]; 

, 당신은 {다시 추가 할 수 있습니다 :

var splitRegex = new Regex(@"\s*{"); 

string input = "/Tests/ShowMessage { 'Text': 'foo' }"; 

//second version of the input: 
//string input = "/Tests/ShowMessage{ 'Text': 'foo' }"; 

string[] splittedText = splitRegex.Split(input, 2); 
splittedText[1] = "{" + splittedText[1]; 

그것은 "({다음에 0 개 이상의 공백)의 발생에서 분할"를 의미 - 그래서 분할 작업은 (당신이 원하는) 당신의 공간을 핵무기, 당신은 {(원하지 않는)하지만 {당신이 원하는 것을 얻는다는 것을 확신 할 수있는 확신을 다시 가질 수 있습니다.

+0

예를 다시 추가하거나 기본'string.split' 방법을 사용하여 내 결과를 얻을 수는 있지만 그게 내가 찾던 것이 아니 었습니다. 그것보다 더 복잡한, 그냥 평범한 샘플을 보여 주었다. –