Как исправить форму регулярного выражения для списанных данных URL через Python? - PullRequest
0 голосов
/ 10 июня 2019

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

Это данные, которые я удалил из некоторого newshub, и он состоит из theme часть и исходная часть .

Мне нужно очистить исходный шаблон от url и пропустить часть темы, чтобы поместить его в массив numpy для дальнейшего анализа.

Мои списанные URL выглядят так:

/video/36225009-report-cnbc-russian-sanctions-ukraine/

/health/36139780-cancer-rates-factors-of-stomach/

/business/36187789-in-EU-IMF-reports-about-world-economic-environment/

/video/35930625-30stm-in-last-tour-tv-album-o-llfl-/?smi2=1

/head/36214416-GB-brexit-may-stops-process-by/

/cis/36189830-kiev-arrested-property-in-crymea/

/incidents/36173928-traffic-collapse-by-trucks-incident/

..............................................................

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

import numpy as np
import pandas as pd
import re

regex = r"^/(\b(\w*)\b)"

pattern_two = regex
prog_two = re.compile( pattern_two )

with open('urls.txt', 'r') as f:

    for line in f:
        line = line.strip()

    if prog_two.match( line ):
          print( line )

Также я проверилрегулярное выражение (на regex101.com), например regex = r"^/(\b(\w*)\b)" и regex = r"^/[a-z]{0,9}./", но оно также не работает должным образом.У меня нет сильных навыков в регулярных выражениях, и, возможно, я делаю что-то не так?

Окончательный результат, которого я ожидаю, следующий:

video
health
business
video
head
cis
incidents  
...........

Большое спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Вы можете просто использовать split() здесь:

with open('urls.txt', 'r') as f:
    for line in f:
        line = line.strip()   # this might be optional
        if line.startswith('/'):
            print(line.split("/")[1])

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

0 голосов
/ 10 июня 2019

Переключитесь на следующий подход:

regex = r"^/([^/]+)"
pat = re.compile(regex)

with open('urls.txt', 'r') as f:
    for line in f:
        line = line.strip()
        m = pat.search(line)
        if m:
            print(m.group(1))

Или без регулярного выражения со встроенными строковыми функциями:

...
for line in f:
    line = line.strip()
    if line.startswith('/'):
        print(line.split('/', 1)[0])
...