Найти - Пользователи
Полная версия: python 3.5.0a1 + regex + обработка исключений
Начало » Python для новичков » python 3.5.0a1 + regex + обработка исключений
1 2 3
Kir@
Здрям!
Ищу определенный текст. В случае, если текст не найден, хочу чтобы на печать вышло соответствующее сообщение. Вот так чё-та не работает :
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()
И совсем забыл, что в тексте могут быть указаны сайты. Подскажите, пожалуйста, как удалить всю латиницу, кроме названий сайтов.
doza_and
Kir@
Здрям
Как не работает? Вроде должно нормально по эксепшену вываливаться при отсутствии текста поскольку ищете свойства у None.
Kir@
И совсем забыл, что в тексте могут быть указаны сайты.
Лучше текст приведите и скажите что хотите выделить. Удалить латиницу кроме названий сайтов - это крокодил будет.
Iskatel
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

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

Результат, если:
1. текст найден
Капитал  (14.09.2006) :  10 000 руб. 
Капитал: данных нет
2. текст не найден:
Капитал   :  
Капитал: данных нет
Kir@
doza_and
Лучше текст приведите и скажите что хотите выделить. Удалить латиницу кроме названий сайтов - это крокодил будет.
Код всей страницы до удаления латиницы - 300 000 знаков, после - 72 000 знаков.
И из всей латиницы мне нужно оставить только название сайта. Как вариант, можно сначала название сайта дернуть с текста, а потом латиницу убрать….
py.user.next
Напиши задание, приведи пример входящего текста и выходящего текста.
Kir@
Задание - парсинг html-кода ленивых коекакеров.
Код от латиницы я чищу, чтобы сократить объем с ~350К символов до ~70К.

Вход (пример почищенного кода про сайт):
190">-:</> <>@.., .., @.</> </> <> < ":190">Сайт:</> < >www.1-mail.com/ </> </> <> < ":190">

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

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

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

p.s. Что за сайт 1-mail.com я понятия не имею, и написал его от фонаря.
py.user.next
Kir@
Вход (пример почищенного кода про сайт):
Кусок нечищенного напиши. Чистишь-то неправильно, после чистки не должно ничего лишнего быть.
Kir@
<tr>
   <td style="width:190px;">Сайт:</td>
   <td valign="middle">
      www.gazprom.ru, www.e-disclosure.ru/portal/company.aspx?id=934
   </td>
</tr>
py.user.next
Чтобы эти ссылки вытащить, сначала нужно выбрать текстовые узлы из таблицы. Делается это через 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   ']
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB