2013-05-17 3 views
1

Я ищу, чтобы разобрать кучу тегов ссылок и вывести две конкретные части.Link Tag Regex Grouping Parse

<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' и часть содержимого тега, в этом случае 'Sample List'.

можно с помощью следующих действий, чтобы capure каждого из них в отдельно списках:

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

Однако я не могу показаться, чтобы сгруппировать их вместе, чтобы обеспечить содержание тегов и справ приходят из того же узла.

Любая помощь будет оценена по достоинству.

ответ

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>

Это обеспечит значение справ внутри установленного значения, и якорь тег включает в свое цитируемое значение. 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.

0

Я не знаю Perl, поэтому я не могу написать этот скрипт в Perl прямо сейчас. Это в python, и это должно быть довольно прямолинейно, что здесь происходит. Если вы знаете Perl, я уверен, что вы можете перевести этот скрипт на Perl. Надеюсь, вы оцените усилия.

Этот скрипт сначала ищет все ссылки, затем для каждой ссылки он ищет руководство и часть содержимого тега.

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 scriptname.py в командной строке.