Форум сайта python.su
2
у меня куча строковых данных такого типа “T2320MP2004P30”
Как мне перевести эту строку в такой вид “T 2320 MP 2 004 P3,0”
в том случае если выполняется ряд следующих условий:
- длина строки 14 символов
- первая буква “Т”
- после нее идут произвольные четыре цифры
- после четырех цифр идут две произвольные буквы
- после двух букв идут 4 произвольные цифры
- потом идет буква “Р”
- а потом идут две произвольные цифры
по этому шаблону мне нужно преобразовать ряд записей, а
потом по похожим шаблонам точно так же остальные записи
Можно ли как-то просто это сделать или нужно писать функцию посимвольного перебора?
спасибо
Отредактировано gtlhbkkj (Апрель 25, 2020 21:35:26)
Офлайн
76
Используй регулярные выражения
Офлайн
2
Romissevdспасибо попробую
Используй регулярные выражения
Офлайн
857
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' >>>
Офлайн
2
py.user.nextтак-то оно понятно, но перевести эту строку в читаемый вид нужно только при соблюдении указанных условий
py.user.next
gtlhbkkj
в том случае если выполняется ряд следующих условий:
- длина строки 14 символов
- первая буква “Т”
- после нее идут произвольные четыре цифры
- после четырех цифр идут две произвольные буквы
- после двух букв идут 4 произвольные цифры
- потом идет буква “Р”
- а потом идут две произвольные цифры
Офлайн
857
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' >>>
Офлайн