Найти - Пользователи
Полная версия: py 3.5 regexp html-кода
Начало » Python для новичков » py 3.5 regexp html-кода
1 2
Kir@
Здрям!
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-ый символ это сразу после “наименование”.
FishHook
Для парсинга html/xml есть куча готовых решений, как в составе стандартной библиотеки так и отдельно от нее, регексп - плохой выбор.
Kir@
FishHook, я знаю эти решения. И знаю, как “прекрасно” они работают.

У меня сейчас есть конкретный вопрос: какого таежного органа регуляркой не удается получит данные? В той же программе есть еще 12 блоков, которые точно так же точно теми же регулярками получают другие данные. А вот наименование не хочет.
FishHook
Где ты вообще такой html взял?
<table>Наименование:</td>
 <table>ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "Рога и копытца"</td>
 </tr>
 
 <table>
 <table>Сокращенное наименование:</td>
 <table>ООО "Рога и копытца"</td>
 </tr>
 
 <table>
 <table>Сокращенное наименование (Eng):</td>
 <table>OOO "Roga"</td>

это не разметка, а бред сумасшедшего наркомана с синдромом Дауна.
Kir@
FishHook, согласен.
Ошибку как исправить?
doza_and
CompanyName=re.search(ur'Сокращенное наименование:[\<\>\/\stabled]*([А-я\"\s]*)', s)
print CompanyName.group(1)
>>> 
ООО "Рога и копытца"

Наверное диапазон начинающийся с любого пробельного символа это странная вещь.
JOHN_16
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)
['ООО "Рога и копытца"']
Kir@
Называется, найди 10 отличий.
Так не работает:
CompanyName=re.search(r'Сокращенное наименование:[\<\>\/\stabled]*([А-я\s-\"]*)', full)
А так работает:
CompanyName=re.search(r'Сокращенное наименование[\:\<\/tabled\>\s]*([А-я\s\"]*)', full)

Фишка в том, что “Сокращенное наименование:” - одно совпадение, а “Сокращенное наименование” - 2 совпадения
py.user.next
Kir@
У меня сейчас есть конкретный вопрос: какого таежного органа регуляркой не удается получит данные?
Разберись с квадратными скобками в регулярном выражении. Ты их неправильно используешь.

Инфа
Kir@
Получил я вот такие строки в переменной:
 
Иванов Иван Иваныч
18 000
50
Иванова Анна Ивановна
18 000
50

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