Python 南亚数字系统中用正则表达式逗号分隔大数
我试图找到一个正则表达式,以逗号分隔一个大的数字的基础上 举几个例子:Python 南亚数字系统中用正则表达式逗号分隔大数,python,regex,comma,Python,Regex,Comma,我试图找到一个正则表达式,以逗号分隔一个大的数字的基础上 举几个例子: 1000000(阿拉伯语)是1000000(印度/印度/南亚) 100000000(阿拉伯语)是100,00,00000(印度语/H/SA) 逗号模式每7位重复一次。例如 1,00,00000,00,00000 从Friedl的《掌握正则表达式》一书中,我得到了阿拉伯数字系统的以下正则表达式: r'(?<=\d)(?=(\d{3})+(?!\d))' r'(?试试这个: (?<=\d)(?=(\d{2}){
(阿拉伯语)是1000000
(印度/印度/南亚)1000000
(阿拉伯语)是100000000
(印度语/H/SA)李>100,00,00000
1,00,00000,00,00000
从Friedl的《掌握正则表达式》一书中,我得到了阿拉伯数字系统的以下正则表达式:
r'(?<=\d)(?=(\d{3})+(?!\d))'
r'(?试试这个:
(?<=\d)(?=(\d{2}){0,2}\d{3}(\d{7})*(?!\d))
(?>>导入re
>>>inp=[“1”+“0”*i表示范围内的i(20)]
>>>[re.sub(r)(?我知道Tim已经回答了您提出的问题,但是假设您从数字而不是字符串开始,您是否考虑过是否需要正则表达式?如果您使用的机器支持印度语言环境,那么您可以使用语言环境模块:
>>> import locale
>>> locale.setlocale(locale.LC_NUMERIC, "en_IN")
'en_IN'
>>> locale.format("%d", 10000000, grouping=True)
'1,00,00,000'
该解释器会话是从Ubuntu系统复制的,但请注意Windows系统可能不支持合适的语言环境(至少我的不支持),因此,虽然这在某种程度上是一种“更清洁”的解决方案,但根据您的环境,它可能可用,也可能不可用。我认为您输入的数字中还没有任何逗号,对吗?是的,没错。让我试试您建议的解决方案吧!谢谢您编辑我的问题Pieters先生。
>>> import re
>>> inp = ["1" + "0"*i for i in range(20)]
>>> [re.sub(r"(?<=\d)(?=(\d{2}){0,2}\d{3}(\d{7})*(?!\d))", ",", i)
for i in inp]
['1', '10', '100', '1,000', '10,000', '1,00,000', '10,00,000', '1,00,00,000',
'10,00,00,000', '100,00,00,000', '1,000,00,00,000', '10,000,00,00,000',
'1,00,000,00,00,000', '10,00,000,00,00,000', '1,00,00,000,00,00,000',
'10,00,00,000,00,00,000', '100,00,00,000,00,00,000',
'1,000,00,00,000,00,00,000', '10,000,00,00,000,00,00,000',
'1,00,000,00,00,000,00,00,000']
result = re.sub(
r"""(?x) # Enable verbose mode (comments)
(?<=\d) # Assert that we're not at the start of the number.
(?= # Assert that it's possible to match:
(\d{2}){0,2} # 0, 2 or 4 digits,
\d{3} # followed by 3 digits,
(\d{7})* # followed by 0, 7, 14, 21 ... digits,
(?!\d) # and no more digits after that.
) # End of lookahead assertion.""",
",", subject)
>>> import locale
>>> locale.setlocale(locale.LC_NUMERIC, "en_IN")
'en_IN'
>>> locale.format("%d", 10000000, grouping=True)
'1,00,00,000'