我正在寻找解析一堆链接标签并输出两个特定部分。
<a href='/mysite/test/sample2/_layouts/ListEdit.aspx?List={2A1D7816-6AC1-4B3B-B9E9-9EEF1B31F812}' onclick='GoToLink(this);return false;'>Customize "Sample List"</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 ")((.*)(?="))
但是我似乎无法将这些组合在一起以确保标记内容和guid来自同一节点。
任何帮助都将不胜感激。
答案 0 :(得分:0)
<a\b[^>]*List=[{]([a-fA-F0-9]{8}-(?:[a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12})[}][^>]*>[^<]*((?:\bCustomize\b\s(["']|"))(.*)\3)[^<]*</a>
这将确保您的guid值在值集内,并且anchor标记包含您的引用值。 reqex假定sample list
被相同的打开和关闭引号包围。
示例
组
0: <a href='/mysite/test/sample2/_layouts/ListEdit.aspx?List={2A1D7816-6AC1-4B3B-B9E9-9EEF1B31F812}' onclick='GoToLink(this);return false;'>Customize "Sample List"</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 "Sample List"</a>
bla bla
<a href='/mysite/test/sample2/_layouts/ListEdit.aspx?List={21M31F46-937B-88B3-U7Z1-99DFJZ9N249A}' onclick='GoToLink(this);return false;'>Another "This is it"</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('>[^<]*"([^<]+)"[^<]*</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 "Sample List"</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 "This is it"</a>
list:
21M31F46-937B-88B3-U7Z1-99DFJZ9N249A
quoted text:
This is it
如果你有python,你可以在命令行上使用python scriptname.py
轻松运行脚本。