2014-09-19 4 views
0

사용하는 것과 동일한 문자를 탈출 :정규식 분할 - 나는 문자열을 가지고 내가 분할

나는 "$"문자를 사용하여 정규 표현식을 사용하여 분할 할
string data = "SEQUENCE $FIRST$ THEN $SECOND$ AND FINALLY \\$12345"; 

. 그러나 이스케이프 문자로 \를 사용하고 싶습니다.

sComponents[0] = "SEQUENCE " 
sComponents[1] = "FIRST" 
sComponents[2] = " THEN " 
sComponents[3] = "SECOND" 
sComponents[4] = " AND FINALLY " 
sComponents[5] = "12345" 

을하지만 sComponents [4]와 같은 "AND FINALLY $ 12345"

이 가장 좋은 방법은 무엇입니까로 $를 포함시킬 : 내가 얻을 것입니다 위의 코드를 실행함으로써

string[] sComponents = Regex.Split(data, "(\\$)", RegexOptions.ExplicitCapture); 

이것을 달성하기 위해 Regex는 분리 할 때 어떤 종류의 이스케이프 문자를 사용합니까? 또는 Regex Split을 내 논리로 호출하기 전에 수동으로 처리해야합니까?

기본적으로 Regex가 "$"다음 분할을보고 "\\ $"를 볼 경우이 위치에서 분리되지 않습니다.

+0

무엇인가 '12345'앞에 '$'에 발생하는 분할을 방지 규칙? 그것이 번호 앞에 있다는 사실, 또는 끝에 '$'가 없다는 사실? – md4

+0

"\ SEQUENCE $ FIRST $ THEN $ SECOND $ AND FINALLY \\ $ 12345"와 같은 \\을 사용하려고 생각합니다. – Fylix

+0

@Fylix, 정말로 문자열 배열로 끝내기를 원하십니까? 아니면 다음과 같이 바꾸시겠습니까 $ FIRST $ 및 $ SECOND $를 다른 값과 함께 사용하면 다른 값으로 대체 된 문자열이 하나가 생깁니 까? – aquinas

답변

4

부정적인 선견문을 사용하는 아래의 정규식에 따라 입력 문자열을 분할하면됩니다.

\$(?!\d) 

코드 :

string value = "SEQUENCE $FIRST$ THEN $SECOND$ AND FINALLY $12345"; 
string[] lines = Regex.Split(value, @"\$(?!\d)"); 
foreach (string line in lines) { 
Console.WriteLine(line); 

IDEONE

업데이트 :

를 사용하여 두 개의 백 슬래시을 덧붙일되지 않는 $ 기호에 따라 입력을 분할하는 아래 정규식.

(?<!\\\\)\$ 

코드 :

string value = "SEQUENCE $FIRST$ THEN $SECOND$ AND FINALLY \\\\$12345"; 
string[] lines = Regex.Split(value, @"(?<!\\\\)\$"); 
foreach (string line in lines) { 
Console.WriteLine(line); 

IDEONE

관련 문제