2016-07-12 2 views
1

Мне нужно извлечь данные в двойные кавычки из строки.Эффективный способ извлечения данных в двойные кавычки

Вход:

<a href="Networking-denial-of-service.aspx">Next Page →</a> 

Выход:

Networking-denial-of-service.aspx 

В настоящее время я использую следующий метод, чтобы сделать это, и он работает нормально.

atag = '<a href="Networking-denial-of-service.aspx">Next Page →</a>' 
start = 0 
end = 0 

for i in range(len(atag)): 
    if atag[i] == '"' and start==0: 
     start = i 
    elif atag[i] == '"' and end==0: 
     end = i 

nxtlink = atag[start+1:end] 

Итак, мой вопрос в том, что есть и другой эффективный способ выполнения этой задачи.

Thankyou.

+3

Есть [регулярные выражения] (https://docs.python.org/2/howto /regex.html), но это [сильно обескуражено] (http://stackoverflow.com/questions/590747/using-regular-expressions-to-parse-html-why-not), чтобы использовать их для HTML, потому что вы может пропустить много случаев. «Правильный» способ сделать это - использовать [HTMLParser] (https://docs.python.org/2/library/htmlparser.html) (или что-то поверх этого) для анализа HTML-кода, а затем выбрать узлы, которые вам нужны, и читать их атрибуты. – CherryDT

+0

@CherryDT Можете ли вы предоставить образец кода или что-то еще. – dazzieta

+0

Я на самом деле не нахожусь в python, поэтому я не уверен в том, чтобы представить пример. Вот почему это комментарий, а не ответ. Но то, что я сказал (есть регулярные выражения, но предпочтительнее HTML-парсер) относится и к другим языкам. – CherryDT

ответ

2

Вы помечен это BeautifulSoup, так что я не понимаю, почему вы хотите регулярное выражение, если вы хотите HREF от всех якорей, то вы можете использовать CSS выбрать 'a[href]', который будет найти только якорные тег, которые имеют HREF атрибутов:

h = '''<a href="Networking-denial-of-service.aspx">Next Page →</a>''' 

soup = BeautifulSoup(h) 

print(soup.select_one('a[href]')["href"]) 

Или найти:

print(soup.find('a', href=True)["href"]) 

Если у вас есть несколько:

for a in soup.select_one('a[href]'): 
    print a["href"] 

Или:

for a in soup.find_all("a", href=True): 
    print a["href"] 

Можно также указать, что вы хотите hrefs, которые имеют ведущий «:

soup.select_one('a[href^="]') 
+0

Спасибо за ответ. – dazzieta

0

Я беру вопрос точно так же, как написано - как получить данные между двумя двойными кавычками. Я согласен с комментариями, что HTMLParser может быть лучше ...

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

import re 
string_with_quotes = 'Some "text" "with inverted commas"\n "some text \n with a line break"' 

Find_double_quotes = re.compile('"([^"]*)"', re.DOTALL|re.MULTILINE|re.IGNORECASE) # Ignore case not needed here, but can be useful. 

list_of_quotes = Find_double_quotes.findall(string_with_quotes) 

list_of_quotes 

['text', 'with inverted commas', 'some text \n with a line break'] 

Если у вас есть нечетное число двойных кавычках, то последний двойной кавычки игнорируется. Если ни один не найден, создается пустой список.

Различные ссылки

http://www.regular-expressions.info/ действительно хорош для изучения регулярных выражений

Regex - Does not contain certain Characters дал мне, как не сделать персонаж

https://docs.python.org/2/library/re.html#re.MULTILINE говорит вам, что делать re.MULTILINE и re.DOTALL (внизу) ,

+0

Thats действительно приятно вас предоставить код и ссылки. – dazzieta

Смежные вопросы