2013-10-21 4 views
3

영숫자 문자 만 허용하고 특정 전체 단어를 제거하는 정규식이 필요합니다.문자와 제공된 단어를 제거하는 정규식

예 :

입력 문자열 :

결과 문자열이--Johny는-bravo's - 그랜드 아빠 :에 의해 대체 할 Johny는-bravos - 아빠

단어/문자 빈 문자열 : this, is, ', grand

여기는 내가 지금까지 가지고있는 것이다 :

var input = "this-is-johny-bravo's-grand-dad"; 
var regex = new Regex(@"([^a-z0-9\-][\b(this|is|grand)\b]?)"); 
var result = regex.Replace(input, ""); 

결과에는 아포스트로피가 없지만 불행히도 여전히 거부 된 전체 단어가 포함되어 있습니다.

답변

3

는 또한 교대로 문자 클래스를 추가해야합니다

new Regex(@"\b(this|is|grand)\b-?|[^a-z0-9-]"); 
+0

+1 그것에 대해 생각

, 당신은 아마이 원하는. :) – Tomalak

+0

(여전히 표현식에 구문 오류가 있지만 불필요한 대시를 제거하지는 못합니다.) – Tomalak

+0

좋은데, 나는 방금 여분의 ') 대괄호를 제거해야했습니다. 감사! –

3

귀하의 표현이 너무 복잡하다. 시도해보십시오.

\b(this|is|grand|')\b-?

또한 이것이 문제의 근본 원인입니다. 문자 클래스는 변경되지 않습니다. 이 [\b(this|is|grand)\b]은 구문 적으로이 [()adghinrst|]과 같습니다.

(\b(this|is|grand)\b|[^a-z0-9-])-?

브레이크 다운 : 내보다 영업 이익의 의도에 아마 더

 
(       # group 1 
    \b(this|is|grand)\b # any of these words 
    |      # or 
    [^a-z0-9-]    # any character except one of these 
)       # end group 1 
-?       # optional dash at the end 
+0

''에 대한 단어 경계가 작동합니까? 나는 이것이 확실하지 않다는 것을 의미한다. 다른 멋진 단축 버전입니다. –

+0

@Rohit 예, 우연히. 단어 경계는 두 가지 방식으로 작동합니다. 하나는'''(단어 "bravo"의 끝)와 하나 (단어''s "'의 시작) 다음에 즉시 발생합니다. 그러나 OP *가 의미하는 것이 아니기 때문에 짧은 버전을 잊어 버리고 더 오래 걸릴 수 있습니다. – Tomalak

+0

설명 블록을 제공해 주셔서 정말 구문을 이해하는 데 도움이됩니다. –

관련 문제