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

Python 从字符串开头删除连续字符,python,regex,Python,Regex,最好的办法是去掉维基百科参考资料开头的字母 e、 g.来自 《星球大战第三集:西斯的复仇》(DVD)。20世纪福克斯。2005年 到 星球大战第三集:西斯的复仇(DVD)。20世纪福克斯。2005年 我已经拼凑出了一个可行的解决方案,但看起来很笨重。我的版本使用格式为“^(?:a(?:b(?:c)?)?”的正则表达式。什么是正确、快速的方法 a = list('abcdefghijklmnopqrstuvwxyz') reg = "^%s%s" % ( "".join(["(?:%s " %b

最好的办法是去掉维基百科参考资料开头的字母

e、 g.来自

《星球大战第三集:西斯的复仇》(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")

在正则表达式中使用字符类如何,即:

re.sub('^([a-z] )*', '', ...)

这将删除任何数量的单个字母字符后跟单个空格的前导引用。

我可能会这样做:

title = re.sub(r'^([a-z]\s)*', '', 'a b c d Wikipedia Reference')

这和你在那里得到的一样。然而,正如@joran beasley所指出的,对于复杂的案例,你可能需要一些更聪明的方法。

他们是否总是遵循这样的模式,即标题前面有四个额外的字母,中间有空格?如果是这样,您可以这样做:

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

如果您是复制和粘贴网页文本,而不是处理html,则问题中提到的一些问题是不可避免的。但是在处理html(如下所示的相关行)时,您可以将
c
(这有助于c)等项作为单位删除。[编辑:我现在看到HTMLIB已被弃用;我不知道合适的替代品,但我相信是的。]

显示的行有点像

^《星球大战:第三集西斯的复仇》DVD评论,由乔治·卢卡斯、里克·麦卡勒姆、罗布·科尔曼、约翰·诺尔和罗杰·盖特主演,[2005]

该行的html源代码是


  • 《星球大战:第三集西斯的复仇》DVD评论,由乔治·卢卡斯、里克·麦卡勒姆、罗布·科尔曼、约翰·诺尔和罗杰·盖特主演,[2005]
  • 一个男孩和他的狗怎么办?
    ?说得好。我想,解决这个问题意味着解析HTML而不是纯文本。虽然,不定冠词总是可以牺牲的;)美好的虽然我们不遵守顺序(例如,它将匹配“acd”),但我无法想象在可读性好得多的情况下会出现问题。在发布问题后,我对这个选项进行了基准测试(虽然使用了+而不是*),发现它的速度是原来的2.3倍。当然,解析源代码是一个更好的主意,我会使用BeautifulSoup和/或lxml来实现这一点。还有一些特定的mediawiki解析器可用,这可能是最佳选择。