Разбить строку на буквы и цифры, сохранить символы - PullRequest
0 голосов
/ 29 декабря 2018

Учитывая приведенный ниже код, исходя из принятого ответа на этот вопрос :

import re    
pathD = "M30,50.1c0,0,25,100,42,75s10.3-63.2,36.1-44.5s33.5,48.9,33.5,48.9l24.5-26.3"    
print(re.findall(r'[A-Za-z]|-?\d+\.\d+|\d+',pathD))    
['M', '30', '50.1', 'c', '0', '0', '25', '100', '42', '75', 's', '10.3', '-63.2', '36.1', '-44.5', 's', '33.5', '48.9', '33.5', '48.9', 'l', '24.5', '-26.3']

Если я включу такие символы, как '$' или '£' в pathDпеременная, выражение re пропускает их, поскольку оно предназначается для [A-Za-z] и цифр

[A-Za-z] # words
|
-?\d+\.\d+ # floating point numbers
|
\d+ # integers

Как изменить шаблон регулярного выражения выше, чтобы также сохранить не буквенно-цифровые символы, согласно желаемому выводу ниже?

new_pathD = '$100.0thousand'

new_re_expression = ???

print(re.findall(new_re_expression, new_pathD))

['$', '100.0', 'thousand']

~~~

Соответствующие сообщения SO ниже, хотя я не мог точно найти, как сохранить символы в упражнении на разделение:

Разделить строку на буквы и цифры

разделить символьные данные на цифры и буквы

Python регулярное выражение разделить строку на цифры и текст / символы

Python - разбиение чисел и букв на подстроки с регулярным выражением

1 Ответ

0 голосов
/ 29 декабря 2018

Попробуйте:

compiled = re.compile(r'[A-Za-z]+|-?\d+\.\d+|\d+|\W')
compiled.findall("$100.0thousand")
# ['$', '100.0', 'thousand']

Вот Advanced Edition ™

advanced_edition = re.compile(r'[A-Za-z]+|-?\d+(?:\.\d+)?|(?:[^\w-]+|-(?!\d))+')

Разница:

compiled.findall("$$$-100thousand")  # ['$', '$', '$', '-', '100', 'thousand']
advanced_edition.findall("$$$-100thousand")  # ['$$$', '-100', 'thousand']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...