链接标记正则表达式分组解析

时间:2013-05-17 13:21:52

标签: regex perl

我正在寻找解析一堆链接标签并输出两个特定部分。

<a href='/mysite/test/sample2/_layouts/ListEdit.aspx?List={2A1D7816-6AC1-4B3B-B9E9-9EEF1B31F812}' onclick='GoToLink(this);return false;'>Customize &quot;Sample List&quot;</a>

我需要捕获指南'2A1D7816-6AC1-4B3B-B9E9-9EEF1B31F812'和部分标签内容,在本例中为'样本列表'。

我可以使用以下内容在单独的列表中捕获每个:

For guid: [a-fA-F0-9]{8}-([a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12}
For tag content: (?<=Customize &quot;)((.*)(?=&quot;))

但是我似乎无法将这些组合在一起以确保标记内容和guid来自同一节点。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

描述

<a\b[^>]*List=[{]([a-fA-F0-9]{8}-(?:[a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12})[}][^>]*>[^<]*((?:\bCustomize\b\s(["']|&quot;))(.*)\3)[^<]*</a>

这将确保您的guid值在值集内,并且anchor标记包含您的引用值。 reqex假定sample list被相同的打开和关闭引号包围。

enter image description here

示例字符串

的组

示例

0: <a href='/mysite/test/sample2/_layouts/ListEdit.aspx?List={2A1D7816-6AC1-4B3B-B9E9-9EEF1B31F812}' onclick='GoToLink(this);return false;'>Customize &quot;Sample List&quot;</a>
1: (2A1D7816-6AC1-4B3B-B9E9-9EEF1B31F812)
2: (Customize "Sample List")
3: (")
4: (Sample List)

声明

有一些边缘情况不适用,但是你应该找到类似于你的样本的输入文本。如果没有,那么你应该真正使用HTML解析。

答案 1 :(得分:0)

我不知道Perl所以我现在不能在Perl中编写这个脚本。这是在python中,它应该是非常直接的在这里发生的事情。如果你知道Perl我很肯定你可以将这个脚本翻译成Perl。我希望你欣赏这一努力。

此脚本首先搜索所有链接,然后为每个链接搜索guid和部分标记内容。

import re

sample_str = """
<a href='/mysite/test/sample2/_layouts/ListEdit.aspx?List={2A1D7816-6AC1-4B3B-B9E9-9EEF1B31F812}' onclick='GoToLink(this);return false;'>Customize &quot;Sample List&quot;</a>
bla bla
<a href='/mysite/test/sample2/_layouts/ListEdit.aspx?List={21M31F46-937B-88B3-U7Z1-99DFJZ9N249A}' onclick='GoToLink(this);return false;'>Another &quot;This is it&quot;</a>
"""

links = re.findall('<a .*?</a>', sample_str)

for link in links:
    print 'link:'
    print '    ' + link
    print 'list:'
    print '    ' + re.search('List={([^}]*)}', link).group(1)
    print 'quoted text:'
    print '    ' + re.search('>[^<]*&quot;([^<]+)&quot;[^<]*</a>', link).group(1)
    print ''

此脚本的输出将为:

link:
    <a href='/mysite/test/sample2/_layouts/ListEdit.aspx?List={2A1D7816-6AC1-4B3B-B9E9-9EEF1B31F812}' onclick='GoToLink(this);return false;'>Customize &quot;Sample List&quot;</a>
list:
    2A1D7816-6AC1-4B3B-B9E9-9EEF1B31F812
quoted text:
    Sample List

link:
    <a href='/mysite/test/sample2/_layouts/ListEdit.aspx?List={21M31F46-937B-88B3-U7Z1-99DFJZ9N249A}' onclick='GoToLink(this);return false;'>Another &quot;This is it&quot;</a>
list:
    21M31F46-937B-88B3-U7Z1-99DFJZ9N249A
quoted text:
    This is it

如果你有python,你可以在命令行上使用python scriptname.py轻松运行脚本。