2011-11-25 2 views
0


Regex에서, 어떻게 모든 단어 사이에 하나의 여분의 공간을 추가합니까? 나는이 문장이

"This is my new program" 

내가 모든 단어 후

"This is my new program" 

즉, 여분의 공간으로 변환하고 싶은 말은.

.net에서 Regex를 사용하여 어떻게하면됩니까?

일반 사항입니다. 단어 사이에 공백의 수가 4 인 경우 예를 들어 말해보십시오.

+0

즉, 사용, 정규 표현식없이 그것을 할 훨씬 더 쉽게되지 않을 것 ['하려면 string.replace ("", "")'] (HTTP : //msdn.microsoft.com/en-us/library/fk49wtc1.aspx) –

+0

@Shaw - 문제는 단어 사이의 공백 수가 2 또는 3 또는 4 또는 n 일 수 있습니다. 나는 항상 1 여분의 공간을 추가하고 싶다. 예를 들어 말하자면 : 4 개의 공백이 있다면 5 개로 만들고 싶습니다. – GuruC

+0

실제로는 단어 사이에 여분의 공간이 있습니다. 그 후에 있었다면 "프로그램"다음에 공백이 있었어야했고, 이전에 있었다면 "This"앞에 공백이 있어야했습니다. – Vatine

답변

2
string newString = Regex.Replace(originalString, @"\s+", " $0"); 
0

이유 Regex? 문자열 자체에 Replace 메서드를 사용하지 않는 이유는 무엇입니까?

+0

문제는 단어 사이의 공백 수가 2 또는 3 또는 4 또는 n 일 수 있습니다. 나는 항상 1 여분의 공간을 추가하고 싶다. 예를 들어, 공백이 4 개있는 경우 5로 만들고 싶습니다. – GuruC

+0

@abhinav :'[?! \ s] [\ s] *'는'?','!'또는 공백 문자 중 하나와 일치합니다. 0 개 이상의 공백 문자. 나는 그것이 당신이 의도 한 것이라고 생각하지 않습니다. –

+0

나의 나쁜, 부정적인 lookahead를하기위한 것. 엉망이되다. 감사. – abhinav

-1
yourString = Regex.Replace(yourString, "\ {1}", " ") 

이렇게하면 하나의 공백 만있는 각 공백을 두 공백으로 바꿉니다.

+0

이것은 모든 인스턴스를 2 칸 씩 대체하기 때문에 나에게 적합하지 않습니다. 나는 그 단어들 사이에 단지 1 여분의 공간을 추가하고 싶다! – GuruC

0

이 값을 사용할 수 있습니다. 나는 당신이 손대지 않은 채로 남기고 싶은 다른 공간이 없다면 @LukeH 솔루션이 더 좋다고 생각한다.

resultString = Regex.Replace(subjectString, @"(\b\w+\b)(?!$)", "$1 "); 

설명 :

" 
(  # Match the regular expression below and capture its match into backreference number 1 
    \b  # Assert position at a word boundary 
    \w  # Match a single character that is a “word character” (letters, digits, etc.) 
     +  # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
    \b  # Assert position at a word boundary 
) 
(?!  # Assert that it is impossible to match the regex below starting at this position (negative lookahead) 
    $  # Assert position at the end of the string (or before the line break at the end of the string, if any) 
) 
"