2014-07-05 2 views
2

대체 :정규식 : 대상 부분적으로 내 문자열의 일부 문자 사이의 공백을 제거하기 위해 노력하고있어

element 1 : 200 :2 1 2 3 4 - 30  node 1:39 

제거 된 공간은 숫자 사이에 있었다

element 1:200:2 1 2 3 4 -30  node 1:39 

: 나 사이를 포함 - 및 번호. 지금까지 숫자 사이의 공백을 대상으로 : 또는 -을 포함하는 정규 표현식을 사용했습니다.

Regex mySpace = new Regex(@"\W+ (:|-) +"); 

내가 뭘하고 싶은지는 일치하는 공백을 제거하는 것입니다. 내가 어떻게 할 수 있니? 어쩌면 원하는 공간 만 직접 일치시킨 다음 빈 문자열로 바꿀 수있는 좀 더 복잡한 Regex가 있을까요?

+0

사용중인 언어에 대한 태그를 추가하십시오. – Barmar

답변

1

아래 정규식은 : 또는 - 이후 첫 번째 숫자까지의 숫자 사이의 공백과 정확하게 일치합니다. 일치하는 공백을 빈 문자열로 바꿉니다.

(?<=\d)\s*(?=:)|(?<=:)\s+|(?<=-)\s+(?=\d) 

귀하의 C# 코드가 될 것이다 DEMO

,

string pattern = @"(?<=\d)\s*(?=:)|(?<=:)\s+|(?<=-)\s+(?=\d)"; 
string test = Regex.Replace("element 1 : 200 :2 1 2 3 4 - 30  node 1:39", pattern, ""); 
Console.WriteLine(test); 
Console.ReadLine(); 

출력 :

element 1:200:2 1 2 3 4 -30  node 1:39 

IDEONE

설명 :

  • (?<=\d)\s*(?=:) 대전 :
  • | 논리 OR 연산자 뒤에 숫자 후의 공백.
  • (?<=:)\s+:
  • | 논리 OR 연산자 후 하나 이상의 공백 일치.
  • (?<=-)\s+(?=\d)-의 직후에 하나 이상의 공백 숫자와 일치합니다.
+0

이 상세한 답변 해 주셔서 감사합니다! – Sturm

1

자신 만의 정규식을 사용하려는 경우 교체 부품에서 그룹을 사용할 수 있습니다. 당신의 정규 표현식은 그룹에 콜론이나 대쉬를 캡쳐합니다. 그래서 당신은 단지 그룹과 함께 경기를 교체 할 수 있습니다 (함으로써 공백을 제거)를 사용하여 $ 1 :

Regex mySpace = new Regex(@"\W+ (:|-) +"); 
mySpace.Replace(yourtext, "$1") 

(여러 그룹을 한 경우 등 $ 1, $ 2, 사용할 수 있습니다)

Avinash Raj의 대답은 더 정교하지만 어쩌면 나중에 읽는 것이 더 쉬울 수도 있습니다.

관련 문제