我应该编写一个接受波斯文本的小程序,并在某些地方将空间更改为半空格。在对文本进行规范化时,在某些语言中使用半空格或zero-width non-joiner来避免ligature。它的unicode字符应该是'\u200c'
,在某些文本编辑器中,它可以在屏幕上以SHIFT + SPACE显示:
import re
txt = input('Please enter a Persian text: ')
original_pattern = r'\b(\w+)\s*(ها|هايي|هايم|هاي)\b'
new_pattern = r'\1 \2'
new_txt = re.sub (original_pattern, new_pattern, txt)
print (new_txt)
在上面的代码中,new_pattern
应该在\1
和\2
之间引入一个半空格,目前它们之间有一个空格。
问题是:我怎样才能在那里放置一个半空间?我尝试了以下内容,在两种情况下都出现了语法错误:
new_pattern = ur'\1\u200c\2'
new_pattern = r'\1\u200c\2'
顺便说一下,虽然在维基百科的文章中,ZWNJ的unicode字符是以U + 200c的形式给出的,但它似乎并没有在python shell中那样工作,它实际上是在空间上加倍:
>>> print ('He is a',u'\u200c','boy')
He is a boy
>>> print ("کتاب",u"\u200c","ها")
کتاب ها
>>> print ("کتاب ها")
کتاب ها
>>>
答案 0 :(得分:4)
Python为print函数的参数添加了一个分隔符,您可以使用sep
argument控制它,尝试
print ('He is a', '\u200c', 'boy', sep="")
对于模式,请尝试
new_pattern = '\\1\u200c\\2'
或
new_pattern = '\\1\N{ZERO WIDTH NON-JOINER}\\2'
原因是,当您添加r
前缀时,将忽略转义\
,因此\u200c
模式的一部分将被强制为5个字符串,即模式等于\\1\\u200c\\2
因此你的错误。