2009-11-25 3 views
1

Как преобразовать регулярное выражение \ w + Чтобы дать мне целые слова в Unicode - не только ASCII?Regex word-breaker in unicode

Я использую .net

+0

какой язык? Тайская? : D – YOU

ответ

1

В .NET \w будет соответствовать символам Unicode, которые Буквы или цифры в Юникоде. Например, он будет соответствовать ì и Æ.

Чтобы просто совместить символы ASCII, вы можете использовать [a-zA-Z0-9].

1

Это работает, как ожидалось для меня

 string foo = "Hola, la niña está gritando en alemán: Maüschen raus!"; 
     Regex r = new Regex(@"\w+"); 
     MatchCollection mc = r.Matches(foo); 
     foreach (Match ma in mc) 
     { 
      Console.WriteLine(ma.Value); 
     } 

Он выводит

 
Hola 
la 
niña 
está 
gritando 
en 
alemán 
Maüschen 
raus 

Вы используете .Match() вместо .Matches()?

Другое возможное объяснение состоит в том, что у вас есть символ без слов в том, что вы ожидаете получить, как запятая.

0

«Официальный» идентификатор Юникода для букв - \p{L}, для номеров \p{N}. Поэтому для полноты, в случаях, когда \w не распространяется на буквы/цифры в Юникоде, эквивалент для \w+ будет [\p{L}\p{N}\p{Pc}]+. Не забывайте, что символы подчеркивания и другие символы «символа пунктуации» также содержатся в \w (так что вы можете сами решить, сохранить их или нет).

+0

Для дальнейшей полноты, '\ w' включает в себя не только подчеркивание, но и целую строку' '{pc}' препинательного типа :) – Andomar

+0

Спасибо Andomar, отредактировали :) –