在除非特定字符(Python)之外的非字母数字和字母数字字符之间插入空格

时间:2013-06-29 11:27:48

标签: python regex tokenize arabic diacritics

是否有机会排除某些unicode(非字母数字)? 我有时会将包含变音符号的阿拉伯语单词标记为非字母数字,但我不想删除它们,我需要在非字母数字字符(除了变音符号)和字母数字之间有空格。这是通过使用正则表达式?我要排除的代表变音符号的unicode如下:u'\ u064b',u'\ u064c',u'\ u064d',u'\ u064e',u'\ u064f',u'\ u0650',你'\ u0651',你'\ u0652'

可能吗?

非常感谢提前

1 个答案:

答案 0 :(得分: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