我需要从字符串中用双引号提取数据。
输入:
<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]
所以,我的问题是,还有其他有效的方法来完成这项任务。
三江源。
答案 0 :(得分:2)
你标记了这个美丽的汤,所以我不明白为什么你想要一个正则表达式,如果你想要所有锚点的href那么你可以使用css select '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"]
您还可以指定您想要具有前导&#34;:
的href soup.select_one('a[href^="]')
答案 1 :(得分: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(下面)是做什么的。