2016-08-01 25 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良い点は、私はJanがそれに取り組んだと思います。ありがとう。 – alecxe

+0

ありがとうございました。 – user3034987

2

rackワード境界を追加します。

\brack:(\w+) 

a demo on regex101.comを参照してください。 Python


demo 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) 
関連する問題