作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试图找到一个正则表达式,以逗号分隔基于 south asian numbering system 的大数字.
几个例子:
1,000,000
(阿拉伯语)是 10,00,000
(印度/印度教/南亚)1,000,000,000
(阿拉伯语)是 100,00,00,000
(印度/H/SA)。 逗号模式每 7 个数字重复一次。例如,1,00,00,000,00,00,000
。
从 Friedl 的《掌握正则表达式》一书中,我有以下阿拉伯数字系统的正则表达式:
r'(?<=\d)(?=(\d{3})+(?!\d))'
对于印度的编号系统,我提出了以下表达式,但它不适用于超过 8 位的数字:
r'(?<=\d)(?=(((\d{2}){0,2}\d{3})(?=\b)))'
使用上述模式,我得到 100000000,00,00,000
。
我正在使用 Python re
模块 (re.sub()
)。有什么想法吗?
最佳答案
我知道 Tim 已经回答了您提出的问题,但是假设您从数字而不是字符串开始,您是否考虑过是否需要正则表达式?如果您使用的机器支持印度语言环境,那么您可以只使用语言环境模块:
>>> import locale
>>> locale.setlocale(locale.LC_NUMERIC, "en_IN")
'en_IN'
>>> locale.format("%d", 10000000, grouping=True)
'1,00,00,000'
该解释器 session 是从 Ubuntu 系统复制的,但请注意 Windows 系统可能不支持合适的语言环境(至少我的不支持),因此虽然这在某些方面是一个“更干净”的解决方案,具体取决于您的它可能可用也可能不可用。
关于python - 使用正则表达式以逗号分隔南亚编号系统中的大量数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14237241/
我是一名优秀的程序员,十分优秀!