You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从文本文件提取阿拉伯数字时的顺序错误问题求助

从文本文件提取阿拉伯数字时的顺序错误问题求助

嗨,我来帮你解决这个问题!

你的问题根源在于阿拉伯文是从右到左(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:29:30