Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2020 21:35:04

gtlhbkkj
Зарегистрирован: 2019-09-20
Сообщения: 173
Репутация: +  2  -
Профиль   Отправить e-mail  

как просто написать шаблон на прочтение и преобразование строки?

у меня куча строковых данных такого типа “T2320MP2004P30”

Как мне перевести эту строку в такой вид “T 2320 MP 2 004 P3,0”
в том случае если выполняется ряд следующих условий:
- длина строки 14 символов
- первая буква “Т”
- после нее идут произвольные четыре цифры
- после четырех цифр идут две произвольные буквы
- после двух букв идут 4 произвольные цифры
- потом идет буква “Р”
- а потом идут две произвольные цифры

по этому шаблону мне нужно преобразовать ряд записей, а
потом по похожим шаблонам точно так же остальные записи

Можно ли как-то просто это сделать или нужно писать функцию посимвольного перебора?
спасибо

Отредактировано gtlhbkkj (Апрель 25, 2020 21:35:26)

Офлайн

#2 Апрель 25, 2020 22:07:00

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

как просто написать шаблон на прочтение и преобразование строки?

Используй регулярные выражения

Офлайн

#3 Апрель 25, 2020 23:47:21

gtlhbkkj
Зарегистрирован: 2019-09-20
Сообщения: 173
Репутация: +  2  -
Профиль   Отправить e-mail  

как просто написать шаблон на прочтение и преобразование строки?

Romissevd
Используй регулярные выражения
спасибо попробую

Офлайн

#4 Апрель 26, 2020 04:09:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

как просто написать шаблон на прочтение и преобразование строки?

gtlhbkkj
у меня куча строковых данных такого типа “T2320MP2004P30”

Как мне перевести эту строку в такой вид “T 2320 MP 2 004 P3,0”
  
>>> def f(s):
...     t = (s[:1],
...          s[1:5],
...          s[5:7],
...          s[7:8],
...          s[8:11],
...          s[11:13] + ',' + s[13:14])
...     return ' '.join(t)
... 
>>> f('T2320MP2004P30')
'T 2320 MP 2 004 P3,0'
>>>



Офлайн

#5 Апрель 27, 2020 17:13:12

gtlhbkkj
Зарегистрирован: 2019-09-20
Сообщения: 173
Репутация: +  2  -
Профиль   Отправить e-mail  

как просто написать шаблон на прочтение и преобразование строки?

py.user.next
py.user.next
так-то оно понятно, но перевести эту строку в читаемый вид нужно только при соблюдении указанных условий

gtlhbkkj
в том случае если выполняется ряд следующих условий:
- длина строки 14 символов
- первая буква “Т”
- после нее идут произвольные четыре цифры
- после четырех цифр идут две произвольные буквы
- после двух букв идут 4 произвольные цифры
- потом идет буква “Р”
- а потом идут две произвольные цифры

там много разных похожих строк такого типа но без пробелов
а результатом должно быть разделение на группы с пробелами

T 2320 MP 2 004 P3,0
M 232320 AB 2 004 P
X 11230 X 3 004 P

c различным количеством букв и цифр в каждой группе.
Похоже что просто и быстро не получается, ничего напишу медленно и нудно

Офлайн

#6 Апрель 28, 2020 07:29:04

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

как просто написать шаблон на прочтение и преобразование строки?

gtlhbkkj
но перевести эту строку в читаемый вид нужно только при соблюдении указанных условий
  
>>> import re
>>> 
>>> def test_string(s):
...     return (
...         len(s) == 14 and
...         re.search(r'^T\d{4}[a-zA-Z]{2}\d{4}P\d{2}$', s) is not None
...     )
... 
>>> def split_string(s):
...     t = (s[:1],
...          s[1:5],
...          s[5:7],
...          s[7:8],
...          s[8:11],
...          s[11:13] + ',' + s[13:14])
...     return ' '.join(t)
... 
>>> def process_string(s):
...     if test_string(s):
...         return split_string(s)
...     else:
...         return None
... 
>>> process_string('T2320MP2004P30')
'T 2320 MP 2 004 P3,0'
>>> process_string('T2320MP2004P300')
>>> process_string('T2320MP2004P3x')
>>> process_string('T1111XP2004P30')
'T 1111 XP 2 004 P3,0'
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version