Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269

Элементарное регулярное выражение не работает

17.07.2015, 19:35. Показов 1878. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть примерно такой код:

Python
1
2
3
4
5
6
7
8
9
import re
fh = open('test1.txt')
lines = fh.readlines()
for line in lines:
        #print line
        p = re.compile(r"|(.*?)|")
        m2 = p.search(line)
        if m2:
                print m2.group(0)
И такой файл с данными:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    +----+---------------+---------------+
    | Id | Login         | Name          |
    +----+---------------+---------------+
    | 1  | admin         | admin         |
    | 2  | admin2        | admin2        |
    | 3  | ekaterina     | Ekaterina     |
    | 4  | commarik      | commarik      |
    | 5  | basildrescher | BasilDrescher |
    | 6  | danielalynn   | DanielaLynn   |
    | 7  | rosez13yipfj  | RoseZ13yipfj  |
    | 8  | veolanoyes    | VeolaNoyes    |
    | 9  | angel         | Angel         |
    | 10 | michalea44    | MichaleA44    |
    +----+---------------+---------------+
Мне нужно достать среднее поле, но я никак не могу это сделать с помощью регекспа. Различные вариации с пробелами и символами табуляции тоже не помогают. В чем может быть проблема? Спасибо.

Добавлено через 24 минуты
Решено, помогли, должно быть:
Python
1
\|(.*?)\|(.*?)\|(.*?)\|
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2015, 19:35
Ответы с готовыми решениями:

Регулярное выражение не работает
Я пишу код: import re string = "console.write('hello world')" regular = "(\()(.+)(\))|(+)|(\.)" print(re.findall(regular, string)) ...

Не работает регулярное выражение
1. В заданной строке символов найдите извлечь информацию, заключенную между <td> и </td>. 2. На вход даётся текст. Необходимо...

Элементарное регулярное выражение прооверки числа
Здравствуйте. Не могу понять, почему выполнение заходит в тело оператора if, если по условию регулярного выражения в оператор if можно...

11
45 / 39 / 24
Регистрация: 29.11.2013
Сообщений: 145
17.07.2015, 21:04
Лучший ответ Сообщение было отмечено young_snake как решение

Решение

young_snake,

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import re
 
a = '''
+----+---------------+---------------+
    | Id | Login         | Name          |
    +----+---------------+---------------+
    | 1  | admin         | admin         |
    | 2  | admin2        | admin2        |
    | 3  | ekaterina     | Ekaterina     |
    | 4  | commarik      | commarik      |
    | 5  | basildrescher | BasilDrescher |
    | 6  | danielalynn   | DanielaLynn   |
    | 7  | rosez13yipfj  | RoseZ13yipfj  |
    | 8  | veolanoyes    | VeolaNoyes    |
    | 9  | angel         | Angel         |
    | 10 | michalea44    | MichaleA44    |
    +----+---------------+---------------+
'''
 
z = re.findall(r'.*?\|.+?\|(.+?)\|.+?\|$', a, re.M)
 
for x in z:
    print(x)
1
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
17.07.2015, 23:58
Вполне можно обойтись без регулярок
Python
1
2
3
for n, line in enumerate(a.split()):
    if not (n - 5) % 7:
        print(n, line)
1
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
18.07.2015, 07:24  [ТС]
Можно, но мне было нужно именно с регекспом. Кстати не совсем понял смысл этой врезки кода.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
18.07.2015, 10:52
Цитата Сообщение от young_snake Посмотреть сообщение
было нужно именно с регекспом
Глупость какая-то. Если что-то можно сделать проще, быстрее и меньшими средствами почему надо делать наоборот?
Python
1
2
3
4
5
with open('test1.txt') as fh:
    for lines in fh:
        line = lines.split()
            if len(line) > 3 and line[1].isdigit():
                print(line[3])
1
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
18.07.2015, 12:25
Если разделитель - "|", так на фига split делать по пробелам, а не по "|"?
0
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
18.07.2015, 16:43  [ТС]
Marinero, чтобы разобраться почему не работается регекспный вариант, очевидно же.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
18.07.2015, 16:55
young_snake, Кстати реализация твоя ужасна. В цикле каждый раз создавать объект шаблона это трындец. Это очень сильно замедлит программу если она будет большой.

Цитата Сообщение от young_snake Посмотреть сообщение
чтобы разобраться почему не работается регекспный вариант
Глупо использовать кувалду, чтобы забить гвоздик для картины.
0
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
18.07.2015, 17:53  [ТС]
Спасибо за подсказку, компиляцию шаблона вынесу.
0
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
19.07.2015, 16:44
Цитата Сообщение от ivsatel Посмотреть сообщение
z = re.findall(r'.*?\|.+?\|(.+?)\|.+?\|$', a, re.M)
for x in z:
* * print(x)
Ну и немного допишем и получим:
Python
1
2
3
4
5
6
z = re.findall(r'.*?\|.+?\|(.+?)\|.+?\|$', a, re.M)
 
for x in z:
    if 'Login' in x:
        continue
    print(x)
а нет... малость не так если в столбце будет 'Login' не прокатит
тогда так:

Python
1
2
3
4
5
6
c = 0
for x in z:
    c +=1
    if c == 1:
        continue
    print(x)
Добавлено через 9 часов 50 минут
или так:
Python
1
2
3
4
for i, x in enumerate(z):
    if i == 0:
        continue
    print(x)
2
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
19.07.2015, 19:35
Почему не наоборот?
Python
1
2
3
for i, x in enumerate(z):
    if i :
        print(x)
0
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
20.07.2015, 04:38
Цитата Сообщение от Marinero Посмотреть сообщение
Почему не наоборот?
ну да или так
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.07.2015, 04:38
Помогаю со студенческими работами здесь

Это когда элементарное выражение не работает
$x=round(((($numb-1)*200)%1000)*$w/1000); $x=0. Хотя $numb принимает такие значения как 22, 11, 1, 31??? Здесь нужно что то нужное.

Рабочее регулярное выражение не работает в .NET, но работает в программе RegExr
Есть таблица и есть регулярка для вытаскивания её из глючного html кода. Составил регулярку в программе RegExr, там всё гуд, вся таблица...

Регулярное выражение работает в Jquery, но не работает в php. Где я допустил ошибку в синтаксисе?
Preg_match("/^ { 5,20 } $/", $_POST)//в php так не работает $("#pass_repeat, #pass").val().match("^ { 5,20 } $") //В Jquery...

Почему регулярное выражение работает в preg_replace, но не работает в str_replace?
Всем привет! Специалисты подскажите, почему регулярное выражение работает в preg_replace, но не работает в str_replace? $ptrn =...

Не работает регулярное выражение
Здравствуйте! В общем так, ниже демонстрационный пример. Обратить внимание стоит на тег <ala> внутри которого есть тег...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru