我有一个名为“ movie_title”的数据框列,其中包含电影名称以及年份。以下是上述专栏中的两种电影标题。
title1='Toy Story (1995)'
title2='City of Lost Children, The (Cité des enfants perdus, La) (1995)'
我想将其分为标题和发行年份两列。我能够使用以下正则表达式成功提取年份:
re.findall('[1-2][0-9]{3}', string)[0]
需要帮助编写另一个可以提取标题的正则表达式(不包括年份信息和方括号)。
例如title1和title2应该看起来像:
title1='Toy Story'
title2='City of Lost Children, The (Cité des enfants perdus, La)'
答案 0 :(得分:1)
这几乎可以解决问题:
Objects/funcobject.c
您只需要除去未捕获的结尾.(?:[^\((0-9)])+
。如果我发现更好的话,将更新此答案。
另一种想法::如果您确定年份会出现在每个电影标题的结尾,那么为什么不删除最后一点呢?因此,从您拥有的每个电影字符串中删除)
吗?
答案 1 :(得分:1)
要获取年份并在末尾消除括号,请使用正则表达式“找到至少有一个数字的第一个字符串,然后加上括号”,正则表达式如下所示: '\ d +(?= \))'
1。)\ d表示找到一个数字,+ infront表示找到至少一个
2。)(?=)表示后跟。 \)表示字符“)”。因此(?= \))的意思是后跟一个')'
3。)将所有内容放在一起表示一个至少一个数字的字符串,后跟')'
输入:失落儿童之城,(拉美(Citédes enfants perdus,La))(1995年)
输出:1995年
要获取电影标题,请使用正则表达式“获取第一个字符串,该字符串包含任意数量的非数字,后跟'(',如下所示:'\ D *(?= \()'
1。)/ D表示非数字。 *表示任意数量的非数字
2。)再次,我们看到(?= \()表示后跟'('
3。)一起表示任意数量的非数字,后跟'('
输入:失落儿童之城,(拉美(Citédes enfants perdus,La))(1995年)
输出:失落儿童之城,(La La)(儿童城)
注意:获取标题的正则表达式假定标题中没有数字。
答案 2 :(得分:1)
>>> titles = [
... 'Toy Story (1995)',
... 'City of Lost Children, The (Cité des enfants perdus, La) (1995)',
... ]
>>>
>>> import re
>>>
>>> for title in titles:
... m = re.match(r'^(.*) \((19\d\d|20\d\d)\)$', title)
... name, year = m.groups()
... print(f'name: {repr(name)} year: {repr(year)}')
...
name: 'Toy Story' year: '1995'
name: 'City of Lost Children, The (Cité des enfants perdus, La)' year: '1995'
regex101.com中^(.*) \((19\d\d|20\d\d)\)$
的解释: