Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 16.03.2019
Сообщений: 81

Проблемы с регулярным выражением

04.02.2020, 09:46. Показов 1275. Ответов 4

Студворк — интернет-сервис помощи студентам
Имеется часть кода (взял с гита, переделываю под себя), не пойму почему регулярное выражение работает, но не корректно, (на скрине 2) делаю регулярку и проверяю ее на сайте - все работает, захожу к себе, работает с перебоями (на скрине 1), сделал новый проект, проверяю только регуляру, работает корректно, вопрос тогда, что не так в проге, если я ничего особенного не делаю, просто достаю данные в той последовательности в которой мне нужно, никаких махинаций над текстом не делал (прикрепил файл). Есть идеи?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import re
import itertools
import datetime as dt
with open('nrc10010.18o') as f:
      lines = f.readlines()
      TYPESdct = ['8', 'L1', 'L2', 'C1', 'C2', 'P1', 'P2', 'S1', 'S2']
      for index, line in enumerate(lines):
                  if 'END OF HEADER' in line:
                        def parseObs(idx = index + 1):
                              obsArray = lines[idx:]
                              y, m, d, hh, mm, ss, ok_flag, num_sats = map( int, map( float, re.findall(r'[-+]?\d*\.\d+|(?<![RG0-9])\d+', obsArray[0])[0:8] ) )
                              y += 2000
                             # print (y, m, d, mm, ss)
                              date = dt.datetime( y, m, d, hh, mm, ss )
                              sats = re.findall(r'[RG]+\d+', obsArray[0].replace(' ', ''))
                              #print (obsArray)
                              #print (date)
                              #print (sats)
                              start = 1
                              if num_sats > 12 :
                                    start = 2
                                    sats = re.findall(r'[RG]+\d+', obsArray[1].replace(' ', ''))
                                    #print (sats)
                              obsObj = { 'EPOCA' : date, 'SATELITES_OBSERVADOS' : sats, 'OBSERVACIONES' : {}, 'OK_FLAG' : ok_flag, 'NUM_SATS' : num_sats }
                              step = 1
                              end = start + num_sats
                              if (len(TYPESdct) > 5) :
                                    end = start + (num_sats * 2)
                                    step = 2
                              for obsindex in range(start, end, step):
                                    print (obsArray[obsindex : obsindex + step])
                                    #print (obsindex)
                                    def strip_(el): return el.strip()
                                    the_obs = re.findall(r'([-+? \d]{9}[. ][ \d]{3})([\s\d][\d]{0,1})([\d]{0,1})','  '.join(obsArray[obsindex : obsindex + step]))
                                    print (the_obs)
                                    the_obs = list(map(strip_, list(itertools.chain.from_iterable(the_obs))))
                                    if(len(the_obs) < len(TYPESdct) * 3):
                                          size = (len(TYPESdct) * 3) - len(the_obs)
                                          print (size)
                              return
                        parseObs()
Миниатюры
Проблемы с регулярным выражением   Проблемы с регулярным выражением  
Вложения
Тип файла: rar nrc10010.rar (1.85 Мб, 2 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.02.2020, 09:46
Ответы с готовыми решениями:

Обработка файлов регулярным выражением
подскажите как написать обработку файлов регулярным выражением? программа должна открыть все файлы из каталога, удалить из каждого 1 и...

Регулярным выражением удалить комментарии из программы на C#
Необходимо удалить комментарии на C# Однострочные комментарии удаляются, а вот с многострочными беда. На фото демонстрация исходного...

Удалить символ регулярным выражением в словаре
Здравствуйте. Как можно с помощью регулярного выражения удалить точку в конце слова в словаре? data = { 'key_1': 'test.', ...

4
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
04.02.2020, 10:40
Хм, а есть какой-нибудь стандарт на структуру файла?

Как минимум, обрезаем заголовок:
Python
1
2
3
4
5
6
with open('nrc10010.18o') as f:
    for line in f:
        if 'END OF HEADER' in line:
            break
    # дальше читаем блоками по 40 строк
    line = f.readline()
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 18  1  1  0  0 30.0000000  0 19R 4G 7R 3G27R12G16R11R13G26R 2R22G 4
                                G21G31R21G 8G 3G23G 9
 126344819.917 7  98268183.386 6  23594002.932    23594006.266    23594004.515
  23594005.051          42.500          38.000
 131291501.65647 102305071.76846  24983940.978    24983938.423    24983940.418
  24983937.748          43.250          37.000
 111960245.375 8  87080190.901 6  20915111.598    20915113.348    20915111.171
  20915112.958          49.750          40.000
 113487271.05447  88431640.72348  21595904.538    21595905.695    21595904.232
  21595905.378          47.250          49.000
 105885793.795 8                  19822135.231                    19822134.983
                        49.750
 105203556.87748  81976801.80847  20019561.916                    20019561.425
  20019559.816          50.250          46.000
 120836169.120 7  93983700.269 6  22612830.871    22612836.373    22612831.363
  22612836.220          45.750          40.000
 113023219.765 7  87906953.978 6  21165611.420    21165616.196    21165611.374
  21165615.929          45.750          38.000
 112616355.19748  87753014.80648  21430170.270    21430171.730    21430170.132
  21430171.875          49.750          50.000
 114916209.830 8  89379279.082 6  21535243.697    21535247.850    21535243.733
  21535248.185          48.750          39.000
 113328735.345 8  88144570.368 6  21230283.455    21230288.299    21230283.116
  21230288.450          48.750          40.000
 118439182.31147  92290281.93946  22538216.286                    22538215.861
  22538214.061          45.500          37.000
 134031149.24945 104439850.71342  25505277.367                    25505276.478
  25505275.242          35.750          16.750
 125784529.01847  98013940.04047  23935992.538    23935991.674    23935992.567
  23935991.014          43.500          42.000
 116572025.705 7  90667136.020 6  21784265.191    21784269.348    21784265.120
  21784268.958          46.750          40.000
 126761519.70846  98775217.07547  24121913.903    24121916.932    24121913.684
  24121916.429          39.500          43.000
 132223067.50145 103030957.94246  25161207.573    25161212.690    25161209.302
  25161211.862          33.250          41.000
 109526408.04248  85345262.51047  20842175.285                    20842174.841
  20842171.765          50.500          44.750
 115259354.30847  89812495.29248  21933121.501    21933122.775    21933122.034
  21933122.871          46.250          48.000
0
0 / 0 / 0
Регистрация: 16.03.2019
Сообщений: 81
04.02.2020, 11:09  [ТС]
Рыжий Лис, ну вот тут стандарты: http://meteolab.ru/doc/rinex211rus.pdf

Добавлено через 17 минут
Рыжий Лис, и да, там не всегда блоки по 40 строк)
0
0 / 0 / 0
Регистрация: 16.03.2019
Сообщений: 81
05.02.2020, 14:03  [ТС]
тема всё еще актуальна...
0
0 / 0 / 0
Регистрация: 16.03.2019
Сообщений: 81
12.02.2020, 09:46  [ТС]
Рыжий Лис, нашел решение...
Переделал регулярку:
Python
1
the_obs = re.findall(r'([-+? \d]{9}[. ][ \d]{3})([\s\d\][\d]{0,1})([\s\d\][\d]{0,1})','  '.join(obsArray[obsindex : obsindex + step]))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.02.2020, 09:46
Помогаю со студенческими работами здесь

Найти слово проспект регулярным выражением
Добрый день! Не получается найти все варианты слова проспект: import re def Проспект(Nm): # Форматирование элемента...

Получить названия городов регулярным выражением
Добрый день! Очень нерегулярно пользуюсь регулярными выражениями. Подскажите как получить названия населенных пунктов, идущих в...

Найти строки не начинающиеся с цифры 9 регулярным выражением
Здравствуйте! Помогите пожалуйста с составлением регулярного выражения. У меня есть список строк, у которых отличается только первая цифра,...

проблемы с регулярным выражением
Люди, помогите пожалуйста написать регулярное выражение для поиска по шаблону. потратила уйму времени, но желаемый результат не...

с регулярным выражением.
Имеем текст youtube.com/watch?v=LOZuxwVk7TU&amp;ob=av2em нужно получить то что находится между /watch?v= и &amp; в нашем случае...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru