最好的是删除有时在维基百科参考文献开头的字母?
e.g。来自
a b c d星球大战第三集:西斯的复仇(DVD)。 20世纪福克斯。 2005。
到
星球大战第三集:西斯的复仇(DVD)。 20世纪福克斯。 2005。
我已经破解了一个有效的解决方案,但看起来很笨拙。我的版本使用'^(?:a(?:b(?:c)?)?)?'形式的正则表达式。什么是正确,快速的方法呢?
a = list('abcdefghijklmnopqrstuvwxyz')
reg = "^%s%s" % ( "".join(["(?:%s " %b for b in a]), ")?"*len(a) )
re.sub(reg, "", "a b c d Wikipedia Reference")
答案 0 :(得分:1)
如何在正则表达式中使用字符类,即:
re.sub('^([a-z] )*', '', ...)
这应该删除单个字母字符后跟单个空格的任意数量的前导出现。
答案 1 :(得分:1)
我可能会做这样的事情:
title = re.sub(r'^([a-z]\s)*', '', 'a b c d Wikipedia Reference')
与你所拥有的相同。然而,就像@ joran-beasley指出的那样,对于复杂的案例,你可能需要更聪明的东西。
答案 2 :(得分:1)
如果您正在复制和粘贴网页文本而不是处理html,则问题中提到的一些问题是不可避免的。但是使用htmllib处理html(如下所示的相关行),您可以删除<sup><i><b>c</b></i></sup>
(其中 c )等项目作为单位。 [编辑:我现在看到htmllib已被弃用;我不知道正确的替换,但相信它是HTMLParser。]
显示的行有点像
^ a b c d e 星球大战:第三集西斯的复仇 DVD评论,其中包括George Lucas,Rick McCallum,Rob Coleman,John Knoll和Roger Guyett,[2005 ]
并且该行的html源是
<li id="cite_note-DVDcom-13"><span class="mw-cite-backlink">^ <a href="#cite_ref-DVDcom_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-DVDcom_13-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-DVDcom_13-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-DVDcom_13-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-DVDcom_13-4"><sup><i><b>e</b></i></sup></a></span> <span class="reference-text"><i>Star Wars: Episode III Revenge of the Sith</i> DVD commentary featuring George Lucas, Rick McCallum, Rob Coleman, John Knoll and Roger Guyett, [2005]</span></li>
答案 3 :(得分:0)
他们是否总是遵循这种模式,在标题前面有四个额外的字母和空格?如果是这样,你可以这样做:
s = "a b c d Star Wars Episode III: Revenge of the Sith (DVD). 20th Century Fox. 2005."
if all([len(x) == 1 and x.isalpha() for x in s.split()[0:4]]):
print s[8:]