从阿拉伯文本中提取拉丁数字

Extract Latin numbers from Arabic text

我有一个包含拉丁数字的阿拉伯文本子串,例如:

text = قيمة بيع الدولار 550

我需要从文本中提取数字,但我正在努力使用适用于此的正则表达式。我认为数字从左到右和字母从右到左的事实给我带来了问题......我承认我不太精通正则表达式所以我希望它只是一个技巧我错过了它. 以下是我尝试过的几件事:

re.findall(r'قيمة بيع الدولار \d+', text)
re.findall(r'\d+ قيمة بيع الدولار', text)

这两个 return 个空列表。

如果我简单地搜索 re.findall(r'\d+', text) 它会成功 return 文本中所有数字的列表,所以我很确定这与搜索阿拉伯语和拉丁语有关在同一个字符串中。

我正在搜索的全文如下所示,所以如果我只搜索数字,returns 东西我不会 need/want。我还需要能够区分标识为“الدولار”和“اليورو”的数字。文本中没有换行符。

Text =    "ها هي قيم العملة يوم 4/2/2022 الساعة 9:00:
    
    قيمة بيع الدولار 550
    قيمة بيع اليورو 600
    قيمة شراء الدولار 700
    قيمة شراء اليورو 701"

x = re.findall(r'\d+', text)

returns

x = ['4', '2', '2022', '9', '00', '550', '600', '700', '701']

编辑:在这种情况下,我不想有一个包含 4、2、2022、9、00 的列表。我通常可以指望我希望按相同顺序排列的数字,但并非总是如此.我还需要确定哪个数字与哪组文本相关联,因为文本包含有关该数字适用于哪种货币的信息(粗略翻译第一行是“卖出美元的价值是 550”)

s = Text.split()
numl = [num for num in s if num.isnumeric()]

这会生成一个由每个 space 分隔的“单词”列表,然后是一个数字列表。所以不必使用正则表达式。

通过混合 right-to-left 和 left-to-right 完全理解您在说什么。

以下似乎有效(突出显示错误,但右侧的匹配符合预期)。既然你想区分它们,那么 2 个单独的正则表达式怎么样?

الدولار.(\d+)
اليورو.(\d+)

https://regex101.com/r/hXYNk2/1