1

我有以下内容:

>>> x='STARSHIP_TROOPERS_INVASION_2012_LOCDE'
>>> re.split('_\d{4}',x)[0]
'STARSHIP_TROOPERS_INVASION'

我如何将年份包括在内?例如:

STARSHIP_TROOPERS_INVASION_2012

请注意,有数以万计的标题,我需要为每个标题拆分年份。我不能split()在这里做一个普通的蟒蛇。

4

3 回答 3

6

更直接的解决方案是使用re.search()/ MatchObject.end()

m = re.search('_\d{4}', x)
print x[:m.end(0)]

如果你想坚持split(),你可以使用后向

re.split('(?<=_\d{4}).', x)

(即使年份在字符串的末尾也可以工作,因为split()如果找不到分隔符,则返回一个带有原始字符串的数组。)

于 2013-05-12T20:15:20.230 回答
3

如果它总是相同的模式,那为什么不呢:

>>> x = 'STARSHIP_TROOPERS_INVASION_2012_LOCDE'
>>> x[:x.rfind('_')]
'STARSHIP_TROOPERS_INVASION_2012'

对于您的原始正则表达式,由于您没有捕获匹配的组,因此它不属于您的匹配项:

>>> re.split('_\d{4}',x)
['STARSHIP_TROOPERS_INVASION', '_LOCDE']
>>> re.split('_(\d{4})',x)
['STARSHIP_TROOPERS_INVASION', '2012', '_LOCDE']

()选择标记为捕获的组

匹配括号内的任何正则表达式,并指示组的开始和结束;组的内容可以在执行匹配后检索,并且可以稍后在字符串中使用 \number 特殊序列进行匹配,如下所述。要匹配文字 '(' 或 ')',请使用 ( 或 ),或将它们包含在字符类中:[(] [)]。

于 2013-05-12T20:15:06.620 回答
1

您可以同时使用两者split(),并search()假设您希望拆分的字符串中有一个这样的日期。

import re
x='STARSHIP_TROOPERS_INVASION_2012_LOCDE'
date=re.search('_\d{4}',x).group(0)
print(date)

>>> 
_2012

print(re.split('_\d{4}',x)[0]+date)

STARSHIP_TROOPERS_INVASION_2012
于 2013-05-12T20:44:17.130 回答