2009-11-27 16 views

답변

6

정규 표현식으로이 작업을 수행 할 수 있습니다. 당신이 필요로하는 정규 표현식은 다음과 같습니다

"\s?\S+[()]\S+\s?" 

이는 포함 된 단어 중 하나 (또는) 또는 둘 모두를 제거하고, 단어를 모두 제거하고 주위의 공백을 축소합니다. 일치 항목은 하나의 공백으로 대체해야합니다.

string s = "car wheels_(four) klaxon"; 
    s = Regex.Replace(s, @"\s?\S*[()]\S*\s?", " "); 

나는이에 대한 VB 번역 완전히 확실하지 않다, 그러나 희망 당신은 그것을 알아낼 수 :

는 C#에서 정규 표현식은 다음과 같이 사용할 수있다.

+0

당신의 정규식이 내 마음을 날려 버렸습니다 – JohnIdol

+0

잠재적 인 문제 : 괄호가 균형을 잡지 못하는 경우에도 괄호로 모든 단어를 일치시킵니다. 그럴 수도 있고 그렇지 않을 수도 있습니다. – Welbog

+0

고마워 마크, 괜찮 았지만 "(바퀴)"같은 단어가있는 단어를 대체하지 않는 경우 : P –

1

약간 다른 :

그것은 다음과 같이 작동
sed "s/\s\+\S*(.\+)\S*\s\+/ /g" yourfile 

:

yourfile :

car wheels_(four) klaxon 
ciao (wheel) hey 
foo bar (baz) qux 
stack overflow_(rulez)_the world 

가에 변화 : 속도가 문제가되지 않는 경우

car klaxon 
ciao hey 
foo bar qux 
stack world 
+1

우와. Regexs는 다시 한번 세계를 지배합니다. http://xkcd.com/208/ – Tonio

+0

잘 작동하지 않습니다. 'foo bar (baz) qux'에서는 "foo bar qux"대신 "foo qux"를 얻습니다. 여러 단어를 일치시키지 않으려면 비 공백 문자와 일치시켜야합니다. –

+0

다른 테스트 케이스가 있습니다 : 'foo ba (r baz qu) x quux.' 포스터는이 경우 원하는 내용을 지정하지 않았으므로 정확한 결과가 무엇인지 알 수는 없지만이 경우 출력이 다릅니다. –

0

및 오버 컴프를 피하기를 원한다. liced ​​정규 표현식을 사용하면 String.Split을 사용하여 "words"배열을 만들고 각 단어를 반복하며 해당 String을 모두 바꿀 수 있습니다. "("는 빈 문자열을 사용하고 String.Join은 ""결과를 얻으십시오.

죄송합니다. codez을 보낼 수 없으므로 VB.NET 컴파일러가 필요하지 않습니다.

관련 문제