从这个lis获取playAudio调用参数的优雅方法是什么

2024-06-14 01:26:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这是最基本的。你知道吗

我只是想知道做这件事的优雅方法是什么。你知道吗

例如:

我想要这个列表中的'python01.wav'和'py*thon'字符串

列表如下:

[
[('name', 'entry')],
[('class', 'entry')],
[('type', 'text/javascript'), ('src', '/term_added.php?hw=python')],
[('type', 'text/javascript')],
[('class', 'headword')],
[('class', 'hw')],
[],
[('class', 'pr')],
[('class', 'unicode')],
[('class', 'unicode')],
[('class', 'unicode')],
[('class', 'unicode')],
[],
[('href', '#'), ('onclick', "playAudio('python01.wav', 'py*thon'); return false;"), ('class', 'audio_link'), ('target', '_blank')],
[('src', '/images/audio.gif'), ('alt', 'Listen to audio'), ('title', 'Listen to audio')],
[],
[('class', 'fl')],
[],
[('class', 'in')],
[('class', 'il')],
[('class', 'if')],
[],
[('class', 'def')],
[('class', 'gram')],
[],
]

谢谢你的帮助!你知道吗


Tags: textpysrc列表typeunicodejavascriptaudio
2条回答

也许不是最好的解决方案,但似乎能满足您的需求:

l = [huge list from your example]
for e in l: # for each list
    for t in e: # for each tuple
        for s in t: # each string
            if 'playAudio' in s:
                args = s[9:].split(',') #skip 'playAudio' split on comma
                print "%s,%s" % (args[0].strip('('),
                                 args[1].lstrip(" ")[0:args[1].find(')')]

我把“优化”这个练习留给你。如果您能解释这些数据来自何处以及它具有什么样的特征(playAudio只能附加到带有HREF属性的对象上吗?),我们可以给你一个更好的解决方案。你知道吗

编辑:

就你个人而言,我会这样做:

from BeautifulSoup import BeautifulSoup, SoupStrainer
import re
import urllib2

doc = urllib2.urlopen("http://www.learnersdictionary.com/search/python").read()
doc = doc.replace('</SCR', '')
audioLinks = SoupStrainer('a', onclick=re.compile(r'^playAudio'))
soup = [str(elm) for elm in BeautifulSoup(doc, parseOnlyThese=audio)]
for elm in soup:
    print re.search(r'playAudio\((.*[^)])\)', elm).group(1)
    # prints 'python01.wav', 'py*thon'
return ('python01.wav', 'py*thon')

这完全符合你的要求。你知道吗

但如果非要我猜的话,我想这不是你想要的。你知道吗

所以你为什么不给我们足够的信息让我们知道你想要什么样的字符串呢?是字符串中单引号之间的所有内容吗?单引号之间包含字母p,y,t,h,o,n顺序的所有内容?playAudio调用的参数是什么?你知道吗

不知道你想要什么,我们就不能给你一个解决问题的办法。你知道吗

相关问题 更多 >