Вам дана строка, состоящая только из цифр, запятых и точек. Ваша задача состоит в том, чтобы заполнить 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
string = "100,000,000.000"
regex_pattern = r"[,.]"
import re
print("\n".join(re.split(regex_pattern, string)))
100
000
000
000
Обновлено: исправлен шаблон на основе решения Дивакар ШАРМА, добавленного в комментарии.
Да, ваша более простая скороговорка тоже работает! Спасибо за добавление
К вашему сведению: [\,|\.]
соответствует запятой, вертикальной черте или точке. Им не нужно экранировать запятую и точку в классе символов, ваше регулярное выражение можно упростить как r"[,.]"
Ваше решение очень близко к ожидаемой работе. В вашем регулярном выражении используется подстановочный знак *
, который соответствует 0 или более экземплярам символа, за которым следует, в вашем случае литералы ,
и .
. Тонкость здесь в том, что они оба могут быть ровно нулевыми совпадениями, поэтому он будет разделен между каждым символом!
Чтобы улучшить регулярное выражение, чтобы оно делало то, что вы намеревались, вы можете изменить его, чтобы использовать подстановочный знак +
, который соответствует одному или нескольким символам. Строго говоря, у вас, вероятно, есть ровно один символ, и в этом случае вам может вообще не понадобиться квантификатор! Однако, если вы используете подстановочный знак +
, вам также нужно будет добавить оператор |
, чтобы он соответствовал либо ,
, либо .
.
В конечном итоге ваше регулярное выражение должно выглядеть как r"\,+|\.+"
или, что еще лучше, используйте группу []
вот так r"[\,\.]"
, которая будет соответствовать ровно одному ,
или .
. Добавьте подстановочный знак +
, чтобы соответствовать одному или нескольким.
Другой способ сделать это — заменить запятую и точку переводом строки:
import re
string = "100,000,000.000"
print re.sub(r"[,.]", '\n', string)
Выход:
100
000
000
000
просто для информации мой тоже сработал :regex_pattern = r"[,.]" # Не удаляйте 'r'. import re print("\n".join(re.split(regex_pattern, input())))