代码之家  ›  专栏  ›  技术社区  ›  Green Cloak Guy

python-如何使用regex来分隔输入

  •  0
  • Green Cloak Guy  · 技术社区  · 8 年前

    假设我直接从代码中的HTML文档中读取。每行的内容如下:

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

    我想写一些代码,可以很容易地选出字段 field1 , field2 field3 . 我知道除了这些字段之外,这个表的每一行都将是完全相同的格式。

    我不太熟悉regex,但在我的研究中,我只见过它用于 搜索 对于未知令牌中的已知令牌,而不是 隔离 已知令牌中的未知令牌。由于我不熟悉regex,我的示例基本上将遵循C字符串格式化程序的模式(使用 %s 对于输入令牌)。

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

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

    这是一个事情,这是有可能与regex?

    3 回复  |  直到 8 年前
        1
  •  0
  •   Kevin DS.    8 年前

    如果你想使用regex,这是你的:

    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')]
    
        2
  •  0
  •   Francois Dang Ngoc    8 年前

    你可以这样做:

    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....
    
        3
  •  0
  •   Laurent H. chthonicdaemon    8 年前

    我建议您使用以下简单的解决方案,返回字段并在列表中选择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']
    
    推荐文章