2011-11-27 4 views
2

문화적으로 독립적 인 방식으로 단어는 있지만 문자는 일치시키지 않으려면 어떻게해야합니까?정규식 단어 일치

\w은 단어 또는 숫자와 일치하지만 숫자는 무시하고 싶습니다. 따라서 \w\s이있는 "111 or this"는 작동하지 않습니다.

나는 "this"만 얻고 싶습니까? 그리고 나는 {^[A-Za-z]+$}이 해결책이 아닐 것이라고 생각한다. 왜냐하면 독일어 알파벳에 몇 가지 추가 문자가 있기 때문이다.

+0

'또는'이 하나의 일치 또는 2로 취급해야합니까? –

+0

패턴 "word1 word2"에 대해 일치를 얻고 싶습니다. "mark1 is 1"은 "mark1 is"에 대해 1 개의 일치를 제공해야합니다. 또한 "내 생일은 11/08/2000입니다."는 "내 생일"과 "생일"이 일치해야합니다 (날짜가 일치하지 않아야 함). – Nickolodeon

답변

-1

정규식은 [^ \ d \ s] +라고 생각합니다. 즉, 숫자 또는 공백 문자가 아닙니다.

5

이 일치하는 단어를 작동합니다 :

\b[^\d\s]+\b 

내역 :

이 특별히 "숫자와 공백 (같은"단어 "를 제외하고 단어 경계로 구분되어 아무것도 일치합니다
\b - word boundary 
[ - start of character class 
^ - negation within character class 
\d - numerals 
\s - whitespace 
] - end of character class 
+ - repeat previous character one or more times 
\b - word boundary 

aa? aa! aa "가 일치합니다). 당신은뿐만 아니라 다음을 제외 할 경우

또는, 당신은 사용할 수 있습니다

\b[\p{L}\p{M}]+\b 

내역 :

\b - word boundary 
[  - start of character class 
\p{L} - single code point in the category "letter" 
\p{M} - code point that is a combining mark (such as diacritics) 
]  - end of character class 
+  - repeat previous character one or more times 
\b - word boundary 
+0

전화하세요. 전에 단어 경계를 사용한 적이 없습니다. 이제하겠습니다. :) – bozdoz

+0

"aaa?", "aaa!", "aaa #"등이 단어와 일치합니다. – mifki

+1

@mifki - 구두점이 일치하지 않습니다. 그것들을 포함하기 위해서'\ b' 이외의 것을 사용할 필요가 있습니다. – Oded

1

내가이 사용하는 것이 좋습니다 것입니다 :

foundMatch = Regex.IsMatch(SubjectString, @"\b[\p{L}\p{M}]+\b"); 

을 어느 것 모든 유니 코드 문자 만 일치시킵니다.

@ Oded의 대답이 효과가있을 수도 있지만 역시 일치합니다 : p+ü+üü++üüü++ü 정확하게 일치하지는 않습니다.

설명 :

" 
\b    # Assert position at a word boundary 
[\p{L}\p{M}] # Match a single character present in the list below 
        # A character with the Unicode property “letter” (any kind of letter from any language) 
        # A character with the Unicode property “mark” (a character intended to be combined with another character (e.g. accents, umlauts, enclosing boxes, etc.)) 
    +    # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
\b    # Assert position at a word boundary 
" 
+1

악센트가 별도의 코드 포인트로 인코딩 될 수 있기 때문에'\ p {M}'도 포함시켜야합니다. – mifki

+0

@mifki +1 포인터 주셔서 감사합니다. – FailedDev

2

사용이 표현 \b[\p{L}\p{M}]+\b. 지정된 범주의 유니 코드 문자 (코드 포인트)를 일치시키기 위해 잘 알려진 표기법을 사용합니다. 따라서 \p{L}은 모든 문자와 일치하며 모든 조합 기호와 일치하는 \p{M}입니다. 경우에 따라 악센트 부호가있는 문자가 두 개의 코드 포인트 (문자 자체 + 결합 기호)로 인코딩 될 수 있으며 \p{L}만으로 이러한 경우 하나만 일치하므로 후기가 필요합니다.

또한 국제 문자가 포함될 수있는 단어의 일반적인 표현이기도합니다. 예를 들어 한 번에 여러 단어를 일치 시키거나 숫자로 끝나는 단어를 허용해야하는 경우이 패턴을 그에 따라 수정해야합니다.

+0

+1. \ p {M} 트릭에 대해 몰랐다. :) – FailedDev

+0

그래, 왜? OP가없는 경우 솔루션이 왜 작동하는지 항상 설명해야합니다. 이 같은 드라이브 - 바이 응답은 여기에서 권장하지 않습니다. –

+0

@ AlanMoore 나는 FailedDev의 대답에 대한 나의 코멘트에서 설명했다. 나는 나의 대답도 업데이트 할 것이다. – mifki