特殊情况下分裂字符串

时间:2013-04-22 01:31:38

标签: python regex

我有一个像这样的字符串的数据文件:

1682|Scream of Stone (Schrei aus Stein) (1991)|08-Mar-1996

我已解析字符串并在"|"拆分并将其转储到列表中,所以我有:

['1682', 'Scream of Stone (Schrei aus Stein) (1991)', '08-Mar-1996']

我需要做的是进一步将名单中的列表拆分为年份周围的括号。如果电影的标题中没有括号,我可以很容易地做到,但事实并非如此。

如果下一个字符不是数字,我怎么写一些会跳过括号上的分裂的东西?我想最终:

['1682', 'Scream of Stone (Schrei aus Stein)', '1991', '08-Mar-1996']

一些帮助太棒了!感谢

3 个答案:

答案 0 :(得分:2)

这看起来像正则表达式的工作!

import re

data = ['1682', 'Scream of Stone (Schrei aus Stein) (1991)', '08-Mar-1996']

def handleYear(matchobj):
    data.insert(2, matchobj.group(1))
    return ''

data[1] = re.sub(r'\s*\((\d+)\)$', handleYear, data[1])

这将从(dddd)的末尾删除data[1]格式的所有字符串,并将其插入data中的下一个位置。

答案 1 :(得分:1)

您可以使用正则表达式拆分:

import re
title="1682|Scream of Stone (Schrei aus Stein) (1991)|08-Mar-1996"
print re.split('\((\d+)\)', title.split("|")[1])

re.split对正则表达式进行拆分,即使用正则表达式作为分隔符。如果拆分表达式中存在捕获,则分隔符也保留在拆分结果中而不是丢弃。

拆分表达式\((\d+)\)首先匹配文字括号\( ... \)。并且在其中只匹配数字\d+。但我们也会捕获数字以保留它们,因此\((\d+)\)

答案 2 :(得分:0)

您可以使用python re module

>>> import re
>>> s = 'Scream of Stone (Schrei aus Stein) (1991)'
>>> re.findall('\([0-9]+\)', s)
['(1991)']
>>> re.findall('\((\d+)\)', s)
['1991']
>>> 

一旦你解析了这一年。您可以将其插入列表中您想要的任何索引。