Как разделить на запятые и точки? - PullRequest
1 голос
/ 27 мая 2019

Вам предоставляется строка, состоящая только из цифр, запятых и точек.Ваша задача - заполнить 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

Ответы [ 3 ]

2 голосов
/ 27 мая 2019
string = "100,000,000.000"

regex_pattern = r"[,.]"

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

Редактировать: Исправлен шаблон, основанный на решении Дивакар ШАРМА добавлен в комментарии.

1 голос
/ 27 мая 2019

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

import re

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

Выход:

100
000
000
000
0 голосов
/ 27 мая 2019

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

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

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

...