从文本文件提取阿拉伯数字时的顺序错误问题求助
从文本文件提取阿拉伯数字时的顺序错误问题求助
嗨,我来帮你解决这个问题!
你的问题根源在于阿拉伯文是从右到左(RTL)的排版方向,文本中数字段的存储顺序和视觉显示顺序是相反的:比如你看到的“٢٢٤ ٤٢٢٧”,实际在字符串里的存储顺序是“٤٢٢٧ ٢٢٤”,直接去掉空格拼接自然会得到和预期相反的结果。
这里给你两种针对性的解决方案,覆盖有空格和无空格的情况:
方案一:处理带空格分隔的数字段
如果数字是用空格分成多个片段的,我们只需要把这些片段的顺序反转后再拼接即可:
import re text = ")رقم : ٤٢٢٧ ٢٢٤" # 提取冒号后所有阿拉伯数字和空格,同时去掉首尾多余空格 match = re.search(r':\s*([\p{Nd}\s]+)', text, re.UNICODE) if match: num_part = match.group(1).strip() # 按空格分割成数字片段,反转顺序后拼接 num_segments = num_part.split() result = ''.join(reversed(num_segments)) print(result) # 输出:٢٢٤٤٢٢٧
方案二:兼容无空格的情况
如果有时候数字之间没有空格(比如文本是)رقم : ٤٢٢٧٢٢٤),且你需要的是视觉上的反转顺序,可以调整代码自动判断:
import re text = ")رقم : ٤٢٢٧٢٢٤" match = re.search(r':\s*([\p{Nd}\s]+)', text, re.UNICODE) if match: num_part = match.group(1).strip() num_segments = num_part.split() if len(num_segments) > 1: # 有空格分隔,反转片段顺序 result = ''.join(reversed(num_segments)) else: # 无空格,反转整个数字字符串 result = num_segments[0][::-1] print(result)
补充说明
- 正则里用
\p{Nd}比\d更精准,它专门匹配Unicode中的十进制数字字符,完美覆盖阿拉伯-Indic数字。 - 如果你的无空格场景是固定长度的两段拆分(比如前4位和后3位),可以直接对字符串切片:
result = num_part[-3:] + num_part[:-3],这样就能精准得到٢٢٤٤٢٢٧。
备注:内容来源于stack exchange,提问作者AAA
相关产品推荐
相关产品推荐

