Как использовать регулярные выражения для разделения ввода - PullRequest
0 голосов
/ 29 мая 2018

Скажем, я читаю прямо из документа HTML в моем коде.Каждая строка выглядит примерно так:

<TD>field1</TD><TD><A HREF="http://sample.url.com">field2</TD><TD><EM>field3</EM></TD>

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

Я не так хорошо знаком с регулярным выражением, но в своем исследовании я только видел, как оно использовало для поиска для поиска известных токенов среди неизвестных токенов, а не изоляции неизвестные токены среди известных токенов.Из-за моей неопытности в регулярных выражениях мой пример будет по существу следовать шаблону форматирования строки C (используя %s для входного токена).

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

(field1, url, field2, field3) = regex_extract('<TD>%s</TD><TD><A HREF="%s">%s</TD><TD><EM>%s</EM></TD>')

Это возможно с помощью регулярных выражений?

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Вы можете сделать что-то вроде:

import re
pattern = re.compile('<TD>(?P<field1>.*?)</TD><TD><A HREF="(?P<url>.*?)">(?P<field2>.*?)</TD><TD><EM>(?P<field3>.*?)</EM></TD>')

html = '<TD>field1</TD><TD><A HREF="http://sample.url.com">field2</TD><TD><EM>field3</EM></TD>'
match = pattern.search(html)
if match:
    field1, url, field2, field3 = match.groups()
    # or you can do field1 = match.group('field1') and so on....
0 голосов
/ 29 мая 2018

Я предлагаю вам следующее простое решение, возвращая поля и опционально URL в списке:

import re

s = "<TD>field1</TD><TD><A HREF=\"http://sample.url.com\">field2</TD><TD><EM>field3</EM></TD>"

# If you want to extract the URL
myPattern = re.compile(r'<TD>(\w+)</TD><TD><A HREF=(.+)>(\w+)</TD><TD><EM>(\w+)</EM></TD>')
listOfMatches = list(myPattern.findall(s)[0])
print(listOfMatches) # ['field1', '"http://sample.url.com"', 'field2', 'field3']

# If you don't want to extract the URL
myPattern = re.compile(r'<TD>(\w+)</TD><TD><A HREF=.+>(\w+)</TD><TD><EM>(\w+)</EM></TD>')
listOfMatches = list(myPattern.findall(s)[0])
print(listOfMatches) # ['field1', 'field2', 'field3']
0 голосов
/ 29 мая 2018

Если вы хотите использовать регулярные выражения, вот ваше:

import re

a = "<TD>field1</TD><TD><A HREF=\"http://sample.url.com\">field2</TD><TD><EM>field3</EM></TD>"
REGEX = r'<TD>(\w+)</TD><TD><A HREF="([A-Za-z/:.]+)">(\w+)</TD><TD><EM>(\w+)</EM></TD>'
print(re.findall(REGEX, a))
>>>> [('field1', 'http://sample.url.com', 'field2', 'field3')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...