2016-08-06 3 views
1

Я пытаюсь идентифицировать в текстах на иврите, где у меня есть слово (с двумя или более словами), за которым следует одна буква. Мне нужно сопоставить эти экземпляры, а затем объединить одну букву в ее «предыдущее слово». Любой текст может иметь несколько случаев, что: Пример:операции с однократными регулярными выражениями в R

texts <- c("שלום חברי צה ל היקרים", "נכון לא נכון קשק ש בבטחון", "צה ל ינצח ") 

Мне нужно заменить его на:

texts <- c("שלום חברי צהל היקרים", "נכון לא נכון קשקש בבטחון", "צהל ינצח ") 

Спасибо за предложения

+3

Попробуйте 'GSUB ("* (UCP) (* UTF) \\ S + \\ р {иврит} \\ б", "\\ 1", тексты, Perl = TRUE),' –

+0

@ WiktorStribiżew я подумайте, что вы пропустили группу захвата – rock321987

+2

Да, @ rock321987, я знал, что что-то пропустил. Итак, Дима, пожалуйста, проверьте http://ideone.com/RWZfAF. –

ответ

1

Из here Еврей диапазона буква Юникода от 05D0-05F2, поэтому вы можете указать диапазон юникодов в классе символов, который затем будет соответствовать одной букве на иврите. Указав пространство как границу слова с каждой стороны, вы можете сопоставить одно буквенное слово и заменить группу захвата, чтобы удалить пробел перед буквой.

gsub("\\s([\u05D0-\u05F2]\\s)", "\\1", texts) # hebrew letter unicode range 
# [1] "שלום חברי צהל היקרים"  "נכון לא נכון קשקש בבטחון" "צהל ינצח " 

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

gsub("\\s([\u0590-\u05FF]\\s)", "\\1", texts) 
# [1] "שלום חברי צהל היקרים"  "נכון לא נכון קשקש בבטחון" "צהל ינצח " 
Смежные вопросы