如何使用正则表达式来分隔输入

时间:2018-05-29 14:46:12

标签: python regex input

说我直接从我的代码中的HTML文档中读取。每行看起来如下所示:

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

我想编写可以轻松选出字段field1field2field3的代码。我知道除了这些字段之外,这个表的每一行都将是完全相同的格式。

我对正则表达式并不熟悉,但在我的研究中,我只看到它用于在未知令牌中搜索已知令牌,而不是隔离已知令牌中的未知令牌。由于我对正则表达式缺乏经验,我的示例基本上遵循C字符串格式化程序的模式(使用%s作为输入标记)。

基本上,我希望能够用regex实现以下方法:

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

这是正则表达式的可能吗?

3 个答案:

答案 0 :(得分:0)

如果你想使用正则表达式,这里是你的:

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')]

答案 1 :(得分:0)

您可以执行以下操作:

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....

答案 2 :(得分:0)

我建议你使用以下简单的解决方案,在列表中返回字段和optionnaly 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']