Заменить десятичную точку в числе с плавающей запятой с помощью Python - PullRequest
0 голосов
/ 22 сентября 2019

Для данной строки, как мы можем заменить десятичную точку в числе с плавающей запятой запятой?

Например: 12.33 должно стать 12,33

Обратите внимание, чтоЯ не могу просто заменить все . на ,, так как текст также содержит точки, разделяющие два предложения.

Это необходимо для очистки текста.

Ответы [ 3 ]

0 голосов
/ 22 сентября 2019

Я думаю, вы можете использовать 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.
0 голосов
/ 22 сентября 2019

Применить это простое выражение подстановки регулярных выражений

re.sub(r'(\d+)\.(\d*)', r'\g<1>,\g<2>',search_string)
0 голосов
/ 22 сентября 2019

Одним из вариантов является использование 2 групп захвата и утверждение того, что слева и справа не является символом без пробелов.

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

По частям

  • (?<!\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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...