В настоящее время я изучаю Regex в Python, и мои ожидаемые результаты Regex не отображаются (я использую Python 3.6). Ниже приведен код для получения значений String, против которых я запускаю регулярное выражение:
import json
import os
import pandas as pd
import requests
import re
url = 'http://www.trumba.com/calendars/brisbane-city-council.json'
uh = requests.get(url)
json_data = json.loads(uh.text)
json_str = json.dumps(json_data)
panda_json = pd.read_json(json_str, typ = 'frame')
Теперь я хочу найти совпадение html-гиперссылка в «местоположении».
С помощью регулярного выражения я ожидаю найти совпадения, подобные приведенным ниже (любые значения между [<] и [>]):
<a href = "http://maps.google.com/?q=33+Teevan+St%2c+Stafford+QLD+4053%2c+Australia" target = "_blank">
поэтому я использую ниже Regex:
pattern = re.compile(r'/[<].*?[>]/')
а затем попытаться сохранить их в фрейме данных
matches = re.findall(pattern, str(panda_json['location']))
x = []
for match in matches:
x.append(match)
x = pd.DataFrame(x)
А х ничего не показывает? Я уверен, что упускаю что-то очевидное.
Обратите внимание, что вы действительно должны использовать избегайте разбора HTML с помощью регулярных выражений, и у этого python есть восхитительная библиотека красивыйсуп, которая обрабатывает и извлекает данные из html.
Спасибо обоим! @WiktorStribiżew это работает. Я узнаю полное определение регулярного выражения. Спасибо за вашу помощь.
@Aaron спасибо также за совет и за указание на этот пост. Я буду копать глубже, почему мы должны избегать разбора HTML с помощью регулярных выражений (хотя я немного запутался... решение от Виктора, похоже, работает).
Проблема в основном в том, что HTML — очень либеральный язык, и попытка учесть все ловушки в регулярном выражении не стоит того, особенно когда другие инструменты уже делают это. Даже в вашем простом случае может быть (технически, хотя и маловероятно) блок <




Вы можете просто извлечь подстроки между < и >, используя
panda_json['location'].str.extract(r'<([^>]+)>')
Шаблон <([^>]+)> сопоставляет < с <, затем сопоставляет один или несколько символов, отличных от > с [^>]+, и, поскольку шаблон заключен в ( и ), помещается в группу 1 (и .str.extract выводит только захваченное значение), а затем > соответствует символ >.
Вы, вероятно, ищете
panda_json['location'].str.extract(r'<([^>]+)>')