Как разделить запятые и точки?

Вам дана строка, состоящая только из цифр, запятых и точек. Ваша задача состоит в том, чтобы заполнить regex_pattern, определенный ниже, который будет использоваться для re.split() всех символов , и .. Гарантируется, что каждой запятой и каждой точке предшествует и следует цифра.

Sample Input 0

100,000,000.000

Sample Output 0

Я использую Python 3.7.2 и пробовал re.split, используя \,* и \.*, как показано ниже в коде, но кажется, что он печатается после каждой цифры.

regex_pattern = r"\,*\.*"

import re
print("\n".join(re.split(regex_pattern, input())))

Однако это, кажется, печатается в неправильном порядке.

Что добавить в regex_pattern?

Ожидаемый результат:

100
000
000
000

Однако я получаю:

1   
0   
0   

0   
0   
0   

0   
0   
0
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
3 480
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий
string = "100,000,000.000"

regex_pattern = r"[,.]"

import re
print("\n".join(re.split(regex_pattern, string)))
100
000
000
000

Обновлено: исправлен шаблон на основе решения Дивакар ШАРМА, добавленного в комментарии.

просто для информации мой тоже сработал :regex_pattern = r"[,.]" # Не удаляйте 'r'. import re print("\n".join(re.split(regex_pattern, input())))

Diwakar SHARMA 27.05.2019 15:18

Да, ваша более простая скороговорка тоже работает! Спасибо за добавление

foglerit 27.05.2019 15:22

К вашему сведению: [\,|\.] соответствует запятой, вертикальной черте или точке. Им не нужно экранировать запятую и точку в классе символов, ваше регулярное выражение можно упростить как r"[,.]"

Toto 27.05.2019 15:25

Ваше решение очень близко к ожидаемой работе. В вашем регулярном выражении используется подстановочный знак *, который соответствует 0 или более экземплярам символа, за которым следует, в вашем случае литералы , и .. Тонкость здесь в том, что они оба могут быть ровно нулевыми совпадениями, поэтому он будет разделен между каждым символом!

Чтобы улучшить регулярное выражение, чтобы оно делало то, что вы намеревались, вы можете изменить его, чтобы использовать подстановочный знак +, который соответствует одному или нескольким символам. Строго говоря, у вас, вероятно, есть ровно один символ, и в этом случае вам может вообще не понадобиться квантификатор! Однако, если вы используете подстановочный знак +, вам также нужно будет добавить оператор |, чтобы он соответствовал либо ,, либо ..

В конечном итоге ваше регулярное выражение должно выглядеть как r"\,+|\.+" или, что еще лучше, используйте группу [] вот так r"[\,\.]", которая будет соответствовать ровно одному , или .. Добавьте подстановочный знак +, чтобы соответствовать одному или нескольким.

Другой способ сделать это — заменить запятую и точку переводом строки:

import re

string = "100,000,000.000"
print re.sub(r"[,.]", '\n', string)

Выход:

100
000
000
000

Другие вопросы по теме