2016-08-01 85 views
1

我需要一个python正则表达式来提取字符串中所有出现的行。Python提取字符串与正则表达式的出现

因此,例如,

line = 'TokenRange(start_token:5835456583056758754, end_token:5867789857766669245, rack:brikbrik0),EndpointDetails(host:192.168.210.183, datacenter:DC1, rack:brikbrikadfdas), EndpointDetails(host:192.168.210.182, datacenter:DC1, rack:brikbrik1adf)])' 

我想提取所有包含架子ID字符串。我对reg ex很不满,所以当我查看python文档时,却找不到re.findAll或类似的正则表达式的正确用法。 有人可以帮助我的正则表达式吗? 这里是输出我需要:[brikbrik0,brikbrikadfdas,brikbrik1adf]

回答

3

您可以捕获字母数字的rack:后到来:

>>> re.findall(r"rack:(\w+)", line) 
['brikbrik0', 'brikbrikadfdas', 'brikbrik1adf'] 
+0

的'R “机架:(\ W +)”'也将提取音轨后'字母数字:'。 –

+2

@WiktorStribiżew好点,我认为扬解决这个问题。谢谢。 – alecxe

+0

感谢它的工作。 – user3034987

2

添加字边界rack

\brack:(\w+) 

a demo on regex101.com


Pythondemo on ideone.com):

import re 
string = """TokenRange(start_token:5835456583056758754, end_token:5867789857766669245, rack:brikbrik0),EndpointDetails(host:192.168.210.183, datacenter:DC1, rack:brikbrikadfdas), EndpointDetails(host:192.168.210.182, datacenter:DC1, rack:brikbrik1adf)])""" 
rx = re.compile(r'\brack:(\w+)') 

matches = [match.group(1) for match in rx.finditer(string)] 
print(matches) 
相关问题