简单的python正则表达式无法按预期工作

sma*_*ili 2 python regex python-regex

我正在尝试提取出该-字符串之前和之后的其余数字,但无法同时提取出两者。这是交互式终端的输出:

>>> a = '#232 - Hello There'
>>> re.findall('#(.*?) - (.*?)', a)
[('232', '')]
Run Code Online (Sandbox Code Playgroud)

为什么我的正则表达式无法正常工作?

hee*_*ayl 8

.*?非贪婪即它将匹配最小的子串,你需要贪婪的版本,即.*对于后者(比赛时间最长的串):

In [1143]: a = '#232 - Hello There'                                                                                                                                                                         

In [1144]: re.findall('#(.*?) - (.*?)', a)                                                                                                                                                                  
Out[1144]: [('232', '')]

In [1145]: re.findall('#(.*?) - (.*)', a)                                                                                                                                                                   
Out[1145]: [('232', 'Hello There')]
Run Code Online (Sandbox Code Playgroud)

但是您应该使用str方法来处理这种简单的情况,例如,使用str.splitspliting on -

In [1146]: a.split(' - ')                                                                                                                                                                      
Out[1146]: ['#232', 'Hello There']
Run Code Online (Sandbox Code Playgroud)

随着str.partition-和切片:

In [1147]: a.partition(' - ')[::2]                                                                                                                                                                          
Out[1147]: ('#232', 'Hello There')
Run Code Online (Sandbox Code Playgroud)