1

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

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

我需要捕获 guid '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 来自同一个节点。

任何帮助,将不胜感激。

4

2 回答 2

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 值在值集中,并且锚标记包含您引用的值。reqex 假设sample list被相同的开引号和右引号包围。

在此处输入图像描述

示例字符串的组

样本

团体

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 解析。

于 2013-05-17T15:21:28.033 回答
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在命令行上运行脚本。

于 2013-05-17T15:50:46.367 回答