Python regex获取所有内容,直到出现一个类似“”(year)”的表达式

2024-06-28 20:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为“movie\u 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]

需要帮助写另一个正则表达式,可以提取标题(不包括年信息连同括号)。你知道吗

例如,标题1和标题2应类似于:

title1='Toy Story'
title2='City of Lost Children, The (Cité des enfants perdus, La)'

Tags: ofthe标题city电影年份lostchildren
3条回答

这几乎可以做到:

.(?:[^\((0-9)])+

您只需要去掉它没有捕获的尾随)。如果我找到更好的答案,我会更新这个答案。你知道吗

另一个想法:如果你确定每年都会出现在每部电影的结尾,为什么不把最后一部分去掉呢?所以从你所有的电影串中去掉(xxxx)?你知道吗

>>> 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)\)$解释:

explanation

要获取年份并消除结尾的括号,请使用正则表达式“查找至少有一个数字后跟一个括号的第一个字符串”。正则表达式如下所示: '\d+(?=\)'

1.)\d表示查找一个数字,+infront表示至少查找其中一个

2.)(?=)表示后跟。\)表示字符“)”。所以(?)?=\))表示后跟“)”

3.)把这些放在一起意味着至少有一个数字后跟“)”的字符串

投入:失踪儿童之城(洛杉矶佩杜斯儿童城)(1995年)

产量:1995年

要获取电影标题,请使用regex“get the first string with any number of non-digits后跟'('如下所示:'\D*(?=\()'

1.)/D表示非数字。带*表示任意数量的非数字

我们又看到了(?)?=\()表示后跟'('

3.)总的来说,它意味着任何数量的非数字后跟'('

投入:失踪儿童之城(洛杉矶佩杜斯儿童城)(1995年)

产出:失踪儿童之城(洛杉矶佩杜斯市儿童城)

注意:获取标题的正则表达式假设标题中没有数字。你知道吗

相关问题 更多 >