2014-02-27 14 views
0

我有以下在python串s濾波值正則表達式

ip access-list IpAclDscpTest 
    10 permit ip any any dscp <value1> 
    20 permit ip any any dscp <value2> 
    30 permit ip any any dscp <value3> 
    40 permit ip any any dscp <value4> 
    50 permit ip any any dscp <value5 

值< 1-5>可以是數字或字符串等'abc31'

例如

txt = '''ip access-list IpAclDscpTest 
    10 permit ip any any dscp 0 
    20 permit ip any any dscp af31 
    30 permit ip any any dscp ef 
    40 permit ip any any dscp 34 
    50 permit ip any any dscp 46''' 

有沒有什麼辦法可以濾除dscp後的值,並使用正則表達式將它們放入列表中?

+0

ouput = re.findall(r'dscp \ s +(。*) \ s +',s) – loki

回答

1

這裏就是我會做,這是對其他的答案有點細化:

import re 

txt = '''ip access-list IpAclDscpTest 
    10 permit ip any any dscp 0 
    20 permit ip any any dscp af31 
    30 permit ip any any dscp ef 
    40 permit ip any any dscp 34 
    50 permit ip any any dscp 46''' 

regex = r'''dscp\s+ # matches dscp and one or more spaces 
      ([a-z0-9]+) # capture group, one or more lowercase alphanumerics 
      \s* # matches possible spaces after (0+) 
       $ # this matches every endline (with MULTILINE flag below) 
     ''' 

number_list = re.findall(regex, txt, re.MULTILINE | re.VERBOSE) 

number_list回報你:

['0', 'af31', 'ef', '34', '46'] 
+0

我編輯了我的問題。請看一看。 – user3230698

+0

@ user3230698那是怎麼回事?請接受,如果你喜歡它。 –

0

試試這個爲你的新問題。

ouput = re.findall(r'dscp\s+(.*)\s+',s) 
0

使前貪婪

#!/usr/bin/python 

input=""" 
ip access-list IpAclDscpTest 
    10 permit ip any any dscp 0 
    20 permit ip any any dscp 12 
    30 permit ip any any dscp 18 
    40 permit ip any any dscp 34 
    50 permit ip any any dscp 46 
""" 

import re 

for v in re.findall('.*dscp\s(\d+)', input): 
    print v