从字符串的开头删除连续字符

时间:2012-12-06 05:00:09

标签: python regex

最好的是删除有时在维基百科参考文献开头的字母?

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")

4 个答案:

答案 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:]