2013-06-29 1 views
2

Есть ли шанс исключить из рассмотрения некоторые из unicode (не буквенно-цифровых)? Я токенизирую арабские слова, которые иногда содержат диакритические знаки, которые считаются не буквенно-цифровыми символами, но я не хочу их удалять, и мне нужно иметь пробел между не-буквенно-цифровым символом (кроме диакритики) и буквенно-цифровым. и это с помощью регулярного выражения? unicode, который я хочу исключить, которые представляют собой диакритики, следующие: u '\ u064b', u '\ u064c', u '\ u064d', u '\ u064e', u '\ u064f', u '\ u0650', u '\ u064d' u '\ u0651', u '\ u0652'Вставить пробел между буквенно-цифровым и буквенно-цифровым символом, кроме определенного символа (Python)

это возможно?

большого спасибо заранее

+2

Не могли бы вы изменить свой вопрос, чтобы включить пример? –

ответ

1

Просто построить пользовательский альфа-цифровой шаблон для вашей цели:

accents = [u'\u064b', u'\u064c', u'\u064d', u'\u064e', u'\u064f', u'\u0650', u'\u0651', u'\u0652'] 
alnum = r'([\w%s]+)' % re.escape(''.join(accents)) 
pattern = re.compile(alnum, re.UNICODE) 

Чтобы найти все маркера:

>>> test_str = "...foo" + ''.join(accents) + "...bar" 
>>> test_str 
'...fooًٌٍَُِّْ...bar' 
>>> pattern.findall(test_str) 
['fooًٌٍَُِّْ', 'bar'] 
>>> len(_) 
2 

Теперь поставить пробел между лексемами а остальное:

>>> ' '.join(filter(None, pattern.split(test_str))) 
'... fooًٌٍَُِّْ ... bar' 
>>> len(_.split()) 
4 
+0

Ничего себе! Большое вам спасибо, это именно то, что мне нужно. Очень ценим, отлично работаем. – user2490790

+0

Тогда вы должны принять ответ. –

+0

Огромное вам спасибо! – user2490790