2012-04-16 2 views
5

Regex를 사용하여 다국어 문자열을 단일 언어 토큰으로 분할하려고합니다. 이 영어 - 아랍어 문자열에 대한 예를 들어 Regex를 단일 언어 토큰으로 사용하여 다국어 문자열 분할

:

'그의 이름은 محمد, 그리고 그의 어머니의 이름은 آمنه이었다.'

결과는 다음과 같이해야합니다 :

  1. 'محمد,'
  2. '와 그의 어머니의 이름이었다'
  3. '그의 이름이었다' 'آمنه.' 그것은 완벽 하진
+0

무엇을 시도 했습니까? 어디서 붙어 있니? 항상 영어 - 아랍어입니까? 아니면 문자열에 어떤 스크립트가 생길지 알지 못합니까? –

+0

@TimPietzcker 예, 항상 영어 - 아랍어입니다. – ARZ

답변

6

(당신은 확실히 맞는 있는지 확인하기 위해 몇 가지 실제 사례에 그것을 시도 할 필요가), 그러나 그것은 시작의 :

splitArray = Regex.Split(subjectString, 
    @"(?<=\p{IsArabic}) # (if the previous character is Arabic) 
    [\p{Zs}\p{P}]+   # split on whitespace/punctuation 
    (?=\p{IsBasicLatin}) # (if the following character is Latin) 
    |      # or 
    (?<=\p{IsBasicLatin}) # vice versa 
    [\s\p{P}]+ 
    (?=\p{IsArabic})", 
    RegexOptions.IgnorePatternWhitespace); 

앞의 경우는 공백/문장 부호에 분할 문자는 아랍어 블록에서 가져온 문자이고 기본 문자는 라틴어 블록의 문자입니다 (또는 그 반대).

0
System.Text.RegularExpressions.Regex regx = new System.Text.RegularExpressions.Regex(@"([\s\(\:]*[a-zA-Z]+[\s\)\:]*)+"); 
var matchs = regx.Matches(input).Cast<System.Text.RegularExpressions.Match>().ToList(); 
+0

이 표현식은 모든 아랍어 토큰을 생략합니다! – ARZ