Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 南亚数字系统中用正则表达式逗号分隔大数_Python_Regex_Comma - Fatal编程技术网

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
    (阿拉伯语)是
    100,00,00000
    (印度语/H/SA)
逗号模式每7位重复一次。例如
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'