gpt4 book ai didi

python - 正则表达式中的半空格

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:02 25 4
gpt4 key购买 nike

我应该编写一个小程序来接收波斯语文本,并在某些地方将空格更改为半空格。半空间或 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 ("کتاب ها")
کتاب ها
>>>

最佳答案

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,因此您的错误。

关于python - 正则表达式中的半空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com