Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 8, 2015 15:36:07

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

python 3.5.0a1 + regex + обработка исключений

Здрям!
Ищу определенный текст. В случае, если текст не найден, хочу чтобы на печать вышло соответствующее сообщение. Вот так чё-та не работает :

uk=re.search(r'([\d\s\.,а-я]*)[\s<>/]*Капитал\s([()\d\.]*)', spravka)
print ('Капитал: ', uk.group(2), uk.group(1))
if uk is not None:uk.group(0), print ('Капитал: данных нет')

И еще один вопрос. Вот так удалил из текста всю латиницу:
s=re.sub(r'[A-z&=;]+', r'',full).strip()
И совсем забыл, что в тексте могут быть указаны сайты. Подскажите, пожалуйста, как удалить всю латиницу, кроме названий сайтов.

Отредактировано Kir@ (Сен. 8, 2015 15:36:43)

Офлайн

#2 Сен. 8, 2015 20:24:36

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

python 3.5.0a1 + regex + обработка исключений

Kir@
Здрям
Как не работает? Вроде должно нормально по эксепшену вываливаться при отсутствии текста поскольку ищете свойства у None.
Kir@
И совсем забыл, что в тексте могут быть указаны сайты.
Лучше текст приведите и скажите что хотите выделить. Удалить латиницу кроме названий сайтов - это крокодил будет.



Офлайн

#3 Сен. 9, 2015 00:53:29

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

python 3.5.0a1 + regex + обработка исключений

doza_and
Удалить латиницу кроме названий сайтов - это крокодил будет.
Да ладно. Что человек спрашиват, наверное то ему и нужно…

Сайты называются в соответствии с RFC 1035.

А Вы, как человек, измученный нарзаном регекспами… Вполне могли бы прикинуть регексп на:

<domain> ::= <subdomain> | " "
<subdomain> ::= <label> | <subdomain> "." <label>
<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
<let-dig-hyp> ::= <let-dig> | "-"
<let-dig> ::= <letter> | <digit>
<letter> ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case
<digit> ::= any one of the ten digits 0 through 9

Что, в принципе, уже почти готовый регексп.

Отредактировано Iskatel (Сен. 9, 2015 01:02:24)

Офлайн

#4 Сен. 9, 2015 04:24:25

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

python 3.5.0a1 + regex + обработка исключений

doza_and
Как не работает? Вроде должно нормально по эксепшену вываливаться при отсутствии текста поскольку ищете свойства у None.

Результат, если:
1. текст найден
Капитал  (14.09.2006) :  10 000 руб. 
Капитал: данных нет
2. текст не найден:
Капитал   :  
Капитал: данных нет

Офлайн

#5 Сен. 9, 2015 04:36:48

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

python 3.5.0a1 + regex + обработка исключений

doza_and
Лучше текст приведите и скажите что хотите выделить. Удалить латиницу кроме названий сайтов - это крокодил будет.
Код всей страницы до удаления латиницы - 300 000 знаков, после - 72 000 знаков.
И из всей латиницы мне нужно оставить только название сайта. Как вариант, можно сначала название сайта дернуть с текста, а потом латиницу убрать….

Офлайн

#6 Сен. 9, 2015 05:51:27

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

python 3.5.0a1 + regex + обработка исключений

Напиши задание, приведи пример входящего текста и выходящего текста.



Офлайн

#7 Сен. 9, 2015 09:20:04

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

python 3.5.0a1 + regex + обработка исключений

Задание - парсинг html-кода ленивых коекакеров.
Код от латиницы я чищу, чтобы сократить объем с ~350К символов до ~70К.

Вход (пример почищенного кода про сайт):

190">-:</> <>@.., .., @.</> </> <> < ":190">Сайт:</> < >www.1-mail.com/ </> </> <> < ":190">

Выход:
Сайт: www.1-mail.com

У меня не работают исключения: фрагмент >Сайт:</> может быть в коде, а может и не быть. В случае, если фрагмента нет, мне надо получить строку:
Сайт: данных нет.

Дальше по ходу разработки будут другие моменты (математические операции, подсчет количества строк в таблице и т.д.), но на данном этапе я с исключениями бьюсь.

p.s. Что за сайт 1-mail.com я понятия не имею, и написал его от фонаря.

Отредактировано Kir@ (Сен. 9, 2015 09:21:40)

Офлайн

#8 Сен. 9, 2015 11:21:07

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

python 3.5.0a1 + regex + обработка исключений

Kir@
Вход (пример почищенного кода про сайт):
Кусок нечищенного напиши. Чистишь-то неправильно, после чистки не должно ничего лишнего быть.



Офлайн

#9 Сен. 9, 2015 11:54:34

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

python 3.5.0a1 + regex + обработка исключений

<tr>
   <td style="width:190px;">Сайт:</td>
   <td valign="middle">
      www.gazprom.ru, www.e-disclosure.ru/portal/company.aspx?id=934
   </td>
</tr>

Отредактировано Kir@ (Сен. 9, 2015 11:55:27)

Офлайн

#10 Сен. 9, 2015 12:14:19

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

python 3.5.0a1 + regex + обработка исключений

Чтобы эти ссылки вытащить, сначала нужно выбрать текстовые узлы из таблицы. Делается это через lxml.html.
Когда у тебя есть текст из тега <td>

      www.gazprom.ru, www.e-disclosure.ru/portal/company.aspx?id=934
тогда ты его сначала чистишь, а потом как-то выбираешь эти ссылки.
Поэтому сначала выбери текстовые узлы из html документа.

Пример:
>>> import lxml.html
>>> 
>>> text = """
... <tr>
...    <td style="width:190px;">Сайт:</td>
...    <td valign="middle">
...       www.gazprom.ru, www.e-disclosure.ru/portal/company.aspx?id=934
...    </td>
... </tr>
... """
>>> 
>>> doc = lxml.html.fromstring(text)
>>> lst = doc.xpath(r'.//td/text()')
>>> lst
['Сайт:', '\n      www.gazprom.ru, www.e-disclosure.ru/portal/company.aspx?id=934\n   ']
>>>



Отредактировано py.user.next (Сен. 9, 2015 12:17:43)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version