【发布时间】:2019-09-22 09:09:27
【问题描述】:
对于给定的字符串,如何用逗号替换浮点数中的小数点?
例如:12.33 应该变成12,33
请注意,我不能简单地将所有. 替换为,,因为文本还包含分隔两个句子的句号。
我需要这个来清理文本。
【问题讨论】:
-
你的尝试在哪里?
-
浮点数是否总是小数点后至少有一位?
标签: regex python-3.x nlp
对于给定的字符串,如何用逗号替换浮点数中的小数点?
例如:12.33 应该变成12,33
请注意,我不能简单地将所有. 替换为,,因为文本还包含分隔两个句子的句号。
我需要这个来清理文本。
【问题讨论】:
标签: regex python-3.x nlp
一种选择是使用 2 个捕获组并断言左侧和右侧的内容不是非空白字符。
(?<!\S)(\d+)\.(\d+)(?!\S)
部分
(?<!\S) 负向后看,左边的不是非空白字符(\d+) 捕获组 1,匹配 1+ 个数字\. 逐字匹配点(\d+)捕获组2,匹配1+位数(?!\S) 负向后看,直接在右边的不是非空白字符在替换使用组 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
【讨论】:
我认为您可以使用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.
【讨论】:
应用这个简单的正则表达式替换
re.sub(r'(\d+)\.(\d*)', r'\g<1>,\g<2>',search_string)
【讨论】:
我能够使用以下正则表达式解决这个问题:
decmark_reg = re.compile('(?<=\d)\.(?=\d)')
【讨论】: