2017-10-07 25 views
-2
str="status 2xx" 
str="status 2xx,3xx" 
str="status 2xx,3xx,4xx" 
str="status blahblahblah" # should not match this 

import re 
if re.match('status\s+(\dxx)',str): 
    print "TRUE" # This matches only first condition. 

我如何得到所有这些数字(2xx or 3xx or 4xx or all),这是在文本状态后出现? 还是有其他方法来提取这些序列?如何在正则表达式中分组模式?

我们可以在正则表达式中处理像([2xx | 3xx | 4xx])吗?这可能不正确,但有人帮助我。

+0

@Gurman:在你的例子中,第三壳体仅具有2个模式。我可以在一个组中提取所有这些序列吗? –

+0

感谢downvoting。但问题不正确还是不可回答? –

+0

你的问题可能会更清楚。 你是什么意思(2xx或3xx或4xx或全部)? –

回答

1

一个选项使用正则表达式来提取CSV数据,然后使用逗号分割字符串以获取单独值列表。

str = "status 123,456 555 789" 
m = re.search('^status\s+([0-9]+(?:(?:\s+|,)[0-9]+)*)$', str) 

if m: 
    nums = m.group(1) 
    vals = filter(None, re.split("[, ]+", nums)) 
else: 
    vals = list() 

print vals 

输出:

['123', '456', '555', '789'] 

Demo

+0

你是对的,但最简单的方法。我们可以用正则表达式来处理吗? *代表任何东西。如果序列不存在会怎么样?它仍然匹配,对吧? –

+0

@DieselKumar我认为我的回答是一个简单的方法。如果您的输入数据与上面显示的数据非常不同,那么您应该包含它。我如何猜测你的源数据是什么? –

+0

好的,我会编辑我的问题。 –