【问题标题】:how to split a string matching a pattern in python如何在python中拆分与模式匹配的字符串
【发布时间】:2009-11-11 08:46:46
【问题描述】:

我的字符串看起来像这样:

'Toy Story..(II) (1995)'

我想把这条线分成两部分:

['Toy Story..(II)','1995']

我该怎么做?谢谢。

【问题讨论】:

  • 这是您要拆分的唯一字符串吗?如果没有,你能再举几个例子吗?
  • 我问的原因是,如果这是您要拆分的唯一字符串,我会将其存储为最终形式: l = ['Toy Story..(II)' ' 1995']
  • 对于类似的拼写错误,很难自动将“Stroy”转换为“Story”,但除此之外,一些简单的字符串解析或简单的正则表达式会有所帮助。
  • -1:标题没用。请将“我想要的”更改为对每天在此网站上寻求帮助的成千上万人有所帮助的内容。

标签: python string split


【解决方案1】:

此代码将帮助您入门:

'Toy Stroy..(II) (1995)'.rstrip(')').rsplit('(',1)

除此之外,您还可以使用r'\s*[(]\d{4}[)]\s*$' 匹配字符串末尾括号中的四位数字。如果你找到了,你可以把它砍掉:

s = ''
l = [s]
match = re.compile(r'\s*[(]\d+[)]\s*$').search(s)
if match is not None:
    l = [s[:len(match.group(0))], s[-len(match.group(0)):].trim]

【讨论】:

  • 对于您的第二种方法,我认为它不适合我的问题。你看,如果刺痛是“Toy Stoy(1000) (1995)”。该方法将无法正常工作。你这么认为吗?
  • 试试看,因为正则表达式只匹配字符串末尾的一个四位数。
【解决方案2】:

一种方法是这样的:

s = 'Toy Stroy..(II) (1995)'
print s[:s.rfind('(')].strip()
print s[s.rfind('('):].strip("()")

输出:

Toy Stroy..(II)
1995
>>> 

【讨论】:

    【解决方案3】:

    您可以为此使用正则表达式。见这里:http://www.amk.ca/python/howto/regex/

    或者您可以使用拆分功能,然后大量删除括号或其他不需要的字符。见这里:http://www.python.org/doc/2.3/lib/module-string.html

    【讨论】:

    • 线路可能很复杂,很难设计一个正常工作。
    • 如果该行总是以年份结尾,那么一个带有 (.*)\s*((\d{4})) 之类的简单正则表达式应该可以解决问题。您将在第一个反向引用中获得电影的名称,在第二个反向引用中获得年份。
    【解决方案4】:
    l[:-1].split("(")
    

    【讨论】:

    • 谢谢,对不起,我举了一个简单的例子。但实际上,这条线就像“Toy Stoy..(II) (1995)”。在这种情况下,您的方法将无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2012-08-22
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多