Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
 Аватар для stimka
25 / 14 / 2
Регистрация: 01.05.2010
Сообщений: 33

Регулярные выражения

02.08.2021, 22:49. Показов 2722. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги, помогите пожалуйста, необходимо решить одну задачу которая поможет мне быстрее выполнять работу.
Есть файл такого содержания

EEEE TEXT / 01AUG
KK TS MV

!4212345SFRUB FIO 02/05/1961 M V/RUB/000000 00000 RUB
F/RUB/SSSSSS VKS2s RUB.
-
EEEE TEXT / 01AUG
KK TS MV

!4212345SFRUB FIO 02/05/1961 M V/RUB/000000 00000 RUB
F/RUB/SSSSSS VKS2s RUB.

В итоге мне необходимо привести его к такому виду.

EEEE TEXT / 01AUG
KK TS MV

4212345SF RUB FIO 02/05/1961 M 42122324F RUB FIO 02/05/1961 M

Необходимо убрать ! и отделить 4212345SFRUB вот так 4212345SF RUB. Список большой.
Все что набросал вот.

Python
1
2
3
4
5
6
7
8
9
10
11
12
import re
bands = list ()
filename = 'TEXT.txt'
for line in open (filename).readlines():
    if not line.startswith(" P") and not line.startswith("-"):
        bands.append(line.strip())
 
print(bands)
filename = 'bands_sorted.txt'
with open (filename, 'w') as fout:
    for band in bands:
            fout.write (band + '\n')
Потом понял что необходимо через регулярки, получилось так.

Python
1
2
3
4
5
6
7
8
import re
 
text = '!4212345SFRUB FIO 02/05/1961 M'
 
finds = re.findall('!(\d{7})([A-Z]{2})([A-Z]{3}) ([A-Z]{3}) (\d{2}/\d{2}/\d{4}) ([A-Z])', text, re.IGNORECASE)
template = '{0}{1} {2} {3} {4} {5}'
for f in finds:
    print(template.format(*f))
Только соединить все не получается, сколько бы не пробовал, выдает совершенно не то. :\
Буду благодарен если поможете.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2021, 22:49
Ответы с готовыми решениями:

Регулярные выражения
Задан текстовый файл, содержащий некоторое множество строк. Требуется преобразовать каждую из этих строк в соответствии с заданным правилом...

Регулярные выражения
Всем доброго времени суток. Нужна помощь с написанием кода. Есть фрагмент файла LOG.txt, который содержит записи событий при работе...

Регулярные выражения
кто знает, подскажите пожалуйста Выполнить анализ кода программы на наличие в нем всех операторов ввода информации с клавиатуры...

6
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
02.08.2021, 23:17
stimka, чето непонятно, откуда такие данные -
Цитата Сообщение от stimka Посмотреть сообщение
4212345SF RUB FIO 02/05/1961 M 42122324F RUB FIO 02/05/1961 M
stimka, приведи кусочек файла побольше, и чутка пообширней ожидаемый результат. А то мало выборки

Добавлено через 11 минут
Цитата Сообщение от stimka Посмотреть сообщение
Необходимо убрать ! и отделить 4212345SFRUB вот так 4212345SF RUB.
Python
1
2
3
text = '!4212345SFRUB FIO 02/05/1961 M'
print(re.sub(r'(?=RUB)', ' ', text[1:]))
# 4212345SF RUB FIO 02/05/1961 M
0
 Аватар для stimka
25 / 14 / 2
Регистрация: 01.05.2010
Сообщений: 33
02.08.2021, 23:49  [ТС]
Вот как пример того какой файл есть ( он больше, я его сократил )

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
START FILE / 04EEE
EE TO SS
 
!73213211RUB KEREO FAQ          03/07/1911 M
 P/RUB/5321          432423 RUB.
-
!421321421RUB ELEVEN            22/11/1922 A
 P/RUB/532212          213214 RUB
-
!720422112RUB EVELER            14/10/1923 M
 P/RUB/532123         TBRGIE RUS.
-
!421234223RUB VEST UNION        11/02/2002 M
 P/RUB/421234         RPUUUM TUR.
-
 
-
*130 POZICII
END FILE
Начало и конец должно остаться и выглядеть должно так в итоге

Code
1
2
3
4
5
6
7
8
9
START FILE / 04EEE
EE TO SS
 
732132112 RUB KEREO FAQ         03/07/1911 M
421321421 RUB ELEVEN            22/11/1922 A
720422112 RUB EVELER            14/10/1923 M
421234223 RUB VEST UNION        11/02/2002 M
*4 POZICII
END FILE
Как видишь все что у меня получилось так это приблизить приблизительно как должен выглядеть.
Я поставил условие что бы отсекать строчки где - и _P .
P/RUB/5321 432423 RUB. - лишние

Добавлено через 1 минуту
Спасибо за то что ответил. Но

Code
1
2
3
text = '!4212345SFRUB FIO 02/05/1961 M'
print(re.sub(r'(?=RUB)', ' ', text[1:]))
# 4212345SF RUB FIO 02/05/1961 M
Скорее всего не подойдет, так как в файле может быть не RUB а другие значения)
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
03.08.2021, 08:30
Лучший ответ Сообщение было отмечено stimka как решение

Решение

Python
1
2
3
4
5
6
7
8
import re
 
with open('in.txt', 'r') as f_in, open('out.txt', 'w') as f_out:
    lines = f_in.readlines()
    f_out.write(''.join(lines[:3]))
    result = [re.sub(r'(?<=\d{8})(?=[A-Z]{3} )', ' ', line[1:]) for line in lines if line.startswith('!')]
    f_out.write(''.join(result))
    f_out.write(f'\n*{len(result)} POZICII\nEND FILE')
in.txt

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
START FILE / 04EEE
EE TO SS
 
!732132112RUB KEREO FAQ         03/07/1911 M
 P/RUB/5321          432423 RUB.
-
!421321421RUB ELEVEN            22/11/1922 A
 P/RUB/532212          213214 RUB
-
!720422112RUB EVELER            14/10/1923 M
 P/RUB/532123         TBRGIE RUS.
-
!421234223RUB VEST UNION        11/02/2002 M
 P/RUB/421234         RPUUUM TUR.
-
 
-
*130 POZICII
END FILE

out.txt
Code
1
2
3
4
5
6
7
8
9
10
START FILE / 04EEE
EE TO SS
 
732132112 RUB KEREO FAQ         03/07/1911 M
421321421 RUB ELEVEN            22/11/1922 A
720422112 RUB EVELER            14/10/1923 M
421234223 RUB VEST UNION        11/02/2002 M
 
*4 POZICII
END FILE
2
 Аватар для stimka
25 / 14 / 2
Регистрация: 01.05.2010
Сообщений: 33
04.08.2021, 01:01  [ТС]
Спасибо, очень выручил. Единственную проблему обнаружил что не везде ставит пробелы.

М223065167 RUB FIO

тут норм

C8WK2V9P0 EUR FIO

А тут не отработало

Правильно я понимаю что в регулярке условие что должны быть цифры и не должны идти буквы?
Если это так, то я так понимаю мне необходимо дополнительный шаблон с условием поставить?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
04.08.2021, 08:27
Лучший ответ Сообщение было отмечено stimka как решение

Решение

stimka, вот про что и сказано - больше информации давать надо по задаче. Регуляркам нужно максимум инфы по контексту.
Пробуй
Python
1
2
3
r'(?<=\w{9})(?=[A-Z]{3} )'
# или вообще конкретизируй валюту 
r'(?<=\w{9})(?=(RUB|EUR|USD) )'
1
 Аватар для stimka
25 / 14 / 2
Регистрация: 01.05.2010
Сообщений: 33
04.08.2021, 13:41  [ТС]
Спасибо огромное, ты мне очень помог )
Первый вариант подходит.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.08.2021, 13:41
Помогаю со студенческими работами здесь

Регулярные выражения
Почему не выводит номер машины? Я вижу свой код так: Мы ищем в начале строки 2 символа из &quot;&quot;, а потом 4 или 5 любых цифр У...

Задача на регулярные выражения
В заданной строке заменить все фрагменты вида $v_(i)$, где «i» – любая одна цифра или буква, на v. Пример. Исходная строка:...

Задачи на регулярные выражения
В России применяются регистрационные знаки нескольких видов. Общего в них то, что они состоят из цифр и букв. Причём используются только...

Регулярные выражения Python
Добрый день! Помогите решить через регулярные выражения: В файле BaseFile.txt определить всех пользователей, у которых задан телефонный...

Задача на регулярные выражения
Найдите слова в которых есть русская буква, а когда-нибудь за ней цифра. Что не так: def Russian_and_number(string: str) -&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru