我有以下内容:
>>> x='STARSHIP_TROOPERS_INVASION_2012_LOCDE'
>>> re.split('_\d{4}',x)[0]
'STARSHIP_TROOPERS_INVASION'
我如何将年份包括在内?例如:
STARSHIP_TROOPERS_INVASION_2012
请注意,有数以万计的标题,我需要为每个标题拆分年份。我不能split()
在这里做一个普通的蟒蛇。
更直接的解决方案是使用re.search()
/ MatchObject.end()
:
m = re.search('_\d{4}', x)
print x[:m.end(0)]
如果你想坚持split()
,你可以使用后向:
re.split('(?<=_\d{4}).', x)
(即使年份在字符串的末尾也可以工作,因为split()
如果找不到分隔符,则返回一个带有原始字符串的数组。)
如果它总是相同的模式,那为什么不呢:
>>> 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 特殊序列进行匹配,如下所述。要匹配文字 '(' 或 ')',请使用 ( 或 ),或将它们包含在字符类中:[(] [)]。
您可以同时使用两者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