【问题标题】:Subsitute decimal point in floating point number with comma Python用逗号Python替换浮点数中的小数点
【发布时间】:2019-09-22 09:09:27
【问题描述】:

对于给定的字符串,如何用逗号替换浮点数中的小数点?

例如:12.33 应该变成12,33

请注意,我不能简单地将所有. 替换为,,因为文本还包含分隔两个句子的句号。

我需要这个来清理文本。

【问题讨论】:

  • 你的尝试在哪里?
  • 浮点数是否总是小数点后至少有一位?

标签: regex python-3.x nlp


【解决方案1】:

一种选择是使用 2 个捕获组并断言左侧和右侧的内容不是非空白字符。

(?<!\S)(\d+)\.(\d+)(?!\S)

部分

  • (?&lt;!\S) 负向后看,左边的不是非空白字符
  • (\d+) 捕获组 1,匹配 1+ 个数字
  • \. 逐字匹配点
  • (\d+)捕获组2,匹配1+位数
  • (?!\S) 负向后看,直接在右边的不是非空白字符

Regex demo

在替换使用组 1 和组 2 并在组之间放置逗号

\1,\2

例如

import re

text = "Test 12.33 test"
new_text = re.sub(r'(?<!\S)(\d+)\.(\d+)(?!\S)', r'\1,\2', text)
print(new_text)

输出

Test 12,33 test

【讨论】:

    【解决方案2】:

    我认为您可以使用finditer 来查找文本中匹配的所有位置。 然后一一替换。

    import re
    
    text = '''This is a dummy text. I want the `.` of 12.12 to go away. 
    I want to replace it with a `,`. Lets see if it works.'''
    
    p = re.compile(r"\d\.\d")
    for m in p.finditer(text):
        text = text[:m.start() + 1] + ',' + text[m.start() + 2:]
    
    print(text)
    

    输出是

    This is a duppy text. I want the `.` of 12,12 to go away. 
    I want to replace it with a `,`. Lets see if it works.
    

    【讨论】:

      【解决方案3】:

      应用这个简单的正则表达式替换

      re.sub(r'(\d+)\.(\d*)', r'\g<1>,\g<2>',search_string)
      

      【讨论】:

        【解决方案4】:

        我能够使用以下正则表达式解决这个问题:

        decmark_reg = re.compile('(?&lt;=\d)\.(?=\d)')

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-06
          • 2021-05-17
          • 1970-01-01
          • 1970-01-01
          • 2022-01-02
          相关资源
          最近更新 更多