Python: использование ссылки JSON API для отображения именованной группы захвата через регулярное выражение - PullRequest
0 голосов
/ 19 апреля 2019

У меня проблемы с отображением правильной именованной группы захвата с помощью регулярных выражений.У меня уже есть формула регулярного выражения, чтобы захватить эту группу.Вот моя регулярное выражение ссылка, чтобы показать.Просматривая ссылку, я пытаюсь отобразить текст, выделенный зеленым цветом.

Зеленая часть - это заголовки страниц из содержащегося в ссылках JSON API.Они помечены как «статья».До сих пор я анализировал JSON, чтобы получить список статей и отобразить его.Некоторые статьи имеют несколько страниц, и я просто пытаюсь отобразить эту самую первую страницу.Вот почему я использовал REGEX, так как я работаю с огромными файлами здесь.Я пытаюсь, чтобы эта зеленая часть регулярного выражения отображалась в моей функции.Это ссылка , где мой рабочий код без реализации регулярных выражений.Вот что я попробовал на своем коде:

import json
import requests
import re

link = "https://wikimedia.org/api/rest_v1/metrics/pageviews/top/en.wikiversity/all-access/2018/01/10"

def making_data(link):
  response = requests.get(link, [])
  data = response.json()
  json_data = data['items']
  articles_list = []

  whole_re= re.compile(r'^[^\/].*')
  rx = re.compile(r'(^[^\/]+)')
  for items in json_data:
      articles = items['articles']
      #Iterate over the list of articles
      for article in articles:
          m = whole_re.match(article)
          if m: 
            articles_list.append(m)
            articles = article.get("article")
            search_match = rx.match(article)
            if search_match: 
              print("Page: %s" % articles)

  return sorted(articles_list)

making_data(link) 

Я получаю сообщение об ошибке с регулярным выражением.Я думаю, что я реализую это неправильно с JSON и регулярным выражением.

Я хочу, чтобы вывод отображал только то, что выделено зеленым цветом из предоставленной ссылки регулярного выражения, а не следующий текст после этого.

Page: Psycholinguistics
Page: Java_Tutorial
Page: United_States_currency  

Надеюсь, все это имеет смысл.Я ценю всю помощь.

1 Ответ

1 голос
/ 19 апреля 2019

Если вы напечатаете ваш article, вы увидите, что это формат словаря.Ваше регулярное выражение не в том, что здесь не так, а в том, как вы ссылаетесь на article.

Вы намереваетесь ссылаться на article_title = article.get("article") из вашего исходного кода, который вы связали, я полагаю.

Другая вещь, которая станет проблемой, - переименование articles в середине вашего цикла.Я внес несколько изменений, чтобы вы могли приступить к работе, но это потребует некоторого уточнения в зависимости от вашего точного использования и результатов, которые вы хотите.

Вы можете ссылаться на группу подходящих объектов с помощью .group(1)

import json
import requests
import re

link = "https://wikimedia.org/api/rest_v1/metrics/pageviews/top/en.wikiversity/all-access/2018/01/10"

def making_data(link):
  response = requests.get(link, [])
  data = response.json()
  json_data = data['items']
  articles_list = []

  whole_re= re.compile(r'^[^\/].*')
  rx = re.compile(r'(^[^\/]+)')
  for items in json_data:
      articles = items['articles']
      #Iterate over the list of articles
      for article in articles:          
          article_title = article.get("article")
          m = whole_re.match(article_title)
          if m: 
            articles_list.append(m[0])
            search_match = rx.match(article_title)
            if search_match:
              print("Page: %s" % search_match.group(1))

  return sorted(articles_list)

making_data(link)
...