如何在英翻阿RTL文本处理中避免小数被错误反转
问题解决方案
问题根源
现有代码的问题出在拆分逻辑使用的\w元字符仅支持匹配字母、数字、下划线,不包含小数点,因此2.50这类小数会被拆分为2、.、50三个独立片段,后续顺序反转后就会变成50.2,不符合预期。
修复方案
调整拆分正则和不需要反转的内容匹配规则,优先把完整小数作为独立单元拆分,避免小数被切割:
修改后的代码
import re from googletrans import GoogleTranslator import arabic_reshaper # 匹配所有不需要反转的单元:英文词汇、整数、小数 no_reverse = re.compile(r'^([A-Za-z0-9_.]+|\d+\.\d+)$') # 拆分正则优先匹配完整小数、英文、数字单元,避免切割小数 split_rule = re.compile(r'(\d+\.\d+|[A-Za-z0-9_.]+)') item_name = "paper roll 2.50m x 3.36m VIP" # 翻译+阿拉伯语整形 translated_text = GoogleTranslator(source='en', target='ar').translate(item_name) reshaped_text = arabic_reshaper.reshape(translated_text) # 按规则拆分后处理顺序和反转 processed = [] for segment in reversed(split_rule.split(reshaped_text)): if not segment.strip(): continue if no_reverse.match(segment): processed.append(segment) else: processed.append(segment[::-1]) final_result = ''.join(processed)
效果验证
运行后输出结果为VIP لفة ورق 2.50 م × 3.36 م,符合预期要求。
内容的提问来源于stack exchange,提问作者derikS4M1
相关产品推荐
相关产品推荐

