Уведомления

Группа в Telegram: @pythonsu

#1 Май 5, 2016 16:04:59

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

py 3.5 regexp html-кода

Здрям!
html-код немного почищен.Надо дернуть русское скоращенное название компании:

<table>Наименование:</td>
 <table>ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "Рога и копытца"</td>
 </tr>
 
 <table>
 <table>Сокращенное наименование:</td>
 <table>ООО "Рога и копытца"</td>
 </tr>
 
 <table>
 <table>Сокращенное наименование (Eng):</td>
 <table>OOO "Roga"</td>

Я уже готов монитор разбить! Что ему не нравится?!
CompanyName=re.search(r'Сокращенное наименование:[\<\>\/\stabled]*([А-я\s-\"]*)', full)
print(CompanyName.group(1))

Ошибка:
Traceback (most recent call last):
  File "C:\париснг.py", line 49, in <module>
    CompanyName=re.search(r'Сокращенное наименование:[\<\>\/\stabled]*([А-я\s-\"]*)', full)
  File "C:\Program Files\Python 3.5\lib\re.py", line 173, in search
    return _compile(pattern, flags).search(string)
  File "C:\Program Files\Python 3.5\lib\re.py", line 293, in _compile
    p = sre_compile.compile(pattern, flags)
  File "C:\Program Files\Python 3.5\lib\sre_compile.py", line 536, in compile
    p = sre_parse.parse(p, flags)
  File "C:\Program Files\Python 3.5\lib\sre_parse.py", line 783, in parse
    p = _parse_sub(source, pattern, 0)
  File "C:\Program Files\Python 3.5\lib\sre_parse.py", line 397, in _parse_sub
    itemsappend(_parse(source, state))
  File "C:\Program Files\Python 3.5\lib\sre_parse.py", line 725, in _parse
    p = _parse_sub(source, state)
  File "C:\Program Files\Python 3.5\lib\sre_parse.py", line 397, in _parse_sub
    itemsappend(_parse(source, state))
  File "C:\Program Files\Python 3.5\lib\sre_parse.py", line 530, in _parse
    raise source.error("bad character range", len(this))
sre_constants.error: bad character range at position 50

50-ый символ это сразу после “наименование”.

Отредактировано Kir@ (Май 5, 2016 16:06:02)

Офлайн

#2 Май 5, 2016 16:17:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

py 3.5 regexp html-кода

Для парсинга html/xml есть куча готовых решений, как в составе стандартной библиотеки так и отдельно от нее, регексп - плохой выбор.



Офлайн

#3 Май 5, 2016 18:01:08

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

py 3.5 regexp html-кода

FishHook, я знаю эти решения. И знаю, как “прекрасно” они работают.

У меня сейчас есть конкретный вопрос: какого таежного органа регуляркой не удается получит данные? В той же программе есть еще 12 блоков, которые точно так же точно теми же регулярками получают другие данные. А вот наименование не хочет.

Офлайн

#4 Май 5, 2016 18:20:16

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

py 3.5 regexp html-кода

Где ты вообще такой html взял?

<table>Наименование:</td>
 <table>ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "Рога и копытца"</td>
 </tr>
 
 <table>
 <table>Сокращенное наименование:</td>
 <table>ООО "Рога и копытца"</td>
 </tr>
 
 <table>
 <table>Сокращенное наименование (Eng):</td>
 <table>OOO "Roga"</td>

это не разметка, а бред сумасшедшего наркомана с синдромом Дауна.



Офлайн

#5 Май 5, 2016 18:56:17

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

py 3.5 regexp html-кода

FishHook, согласен.
Ошибку как исправить?

Офлайн

#6 Май 5, 2016 21:21:08

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

py 3.5 regexp html-кода

CompanyName=re.search(ur'Сокращенное наименование:[\<\>\/\stabled]*([А-я\"\s]*)', s)
print CompanyName.group(1)
>>> 
ООО "Рога и копытца"

Наверное диапазон начинающийся с любого пробельного символа это странная вещь.



Офлайн

#7 Май 5, 2016 23:32:17

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

py 3.5 regexp html-кода

Kir@
Я уже готов монитор разбить!
регулярки часто это кровь и боль. Просто примите этот факт.
Вот кое что конкретно под ваш кошмар
>>> print(s)
<table>Наименование:</td>
 <table>ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "Рога и копытца"</td>
 </tr>
 
 <table>
 <table>Сокращенное наименование:</td>
 <table>ООО "Рога и копытца"</td>
 </tr>
 
 <table>
 <table>Сокращенное наименование (Eng):</td>
 <table>OOO "Roga"</td>
>>> re.findall(r'Сокращенное наименование\:.*?table\>(.*?)\</td', s, re.S|re.U)
['ООО "Рога и копытца"']



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#8 Май 6, 2016 04:46:24

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

py 3.5 regexp html-кода

Называется, найди 10 отличий.
Так не работает:

CompanyName=re.search(r'Сокращенное наименование:[\<\>\/\stabled]*([А-я\s-\"]*)', full)
А так работает:
CompanyName=re.search(r'Сокращенное наименование[\:\<\/tabled\>\s]*([А-я\s\"]*)', full)

Фишка в том, что “Сокращенное наименование:” - одно совпадение, а “Сокращенное наименование” - 2 совпадения

Отредактировано Kir@ (Май 6, 2016 04:47:44)

Офлайн

#9 Май 6, 2016 05:32:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

py 3.5 regexp html-кода

Kir@
У меня сейчас есть конкретный вопрос: какого таежного органа регуляркой не удается получит данные?
Разберись с квадратными скобками в регулярном выражении. Ты их неправильно используешь.

Инфа



Отредактировано py.user.next (Май 6, 2016 05:33:13)

Офлайн

#10 Май 11, 2016 06:44:34

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

py 3.5 regexp html-кода

Получил я вот такие строки в переменной:

 
Иванов Иван Иваныч
18 000
50
Иванова Анна Ивановна
18 000
50

Как мне вывести на печать вот это?
Иванов Иван Иваныч, 50%. Иванова Анна Ивановна, 50%.
С учетом того, что людей может быть от 1 до 10.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version