Найти - Пользователи
Полная версия: как просто написать шаблон на прочтение и преобразование строки?
Начало » Python для новичков » как просто написать шаблон на прочтение и преобразование строки?
1
gtlhbkkj
у меня куча строковых данных такого типа “T2320MP2004P30”

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

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

Можно ли как-то просто это сделать или нужно писать функцию посимвольного перебора?
спасибо
Romissevd
Используй регулярные выражения
gtlhbkkj
Romissevd
Используй регулярные выражения
спасибо попробую
py.user.next
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'
>>>
gtlhbkkj
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 различным количеством букв и цифр в каждой группе.
Похоже что просто и быстро не получается, ничего напишу медленно и нудно
py.user.next
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'
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB