2016-05-19 7 views
0

私は、Pythonスクリプトを書いていますし、大容量のファイルは、以下のように生データの例から、すべてのグループのオブジェクト名と一致したいと思います:正規表現は、文字列の前に言葉を返す - pythonの

IT_PC (Group) -Host: 192.168.103.144 -Host: 192.168.103.145 -Network: 192.168.103.0 255.255.255.0 HR_PC (Group) -Host: 192.168.65.145 -Host: 192.168.62.146 -Host: 192.168.62.154 
Finance_PC (Group) -Finance_PC_192.168.41.125 
Testing_PC (Group) -Host: 192.168.129.1 -Host: 192.168.129.97 -Host: 192.168.59.81 -Host: 192.168.59.82 

マイ必要な出力は次のようにしなければならない:私は必要な結果を一致させるために、通常の急行の下に使用しようとしていますが、それは最初の1 [「IT_PC(グループ)」]を返す

IT_PC (Group) 
HR_PC (Group) 
Finance_PC (Group) 
Testing_PC (Group) 

。感謝の気持ちがありますか?あなたも、より具体的にすることができ、

>>> re.findall(r"\w+(?= \(Group\))", source) 
['IT_PC', 'HR_PC', 'Finance_PC', 'Testing_PC'] 

または:

source = "IT_PC (Group) -Host: 192.168.103.144 -Host: 192.168.103.145 -Network: 192.168.103.0 255.255.255.0 HR_PC (Group) -Host: 192.168.65.145 -Host: 192.168.62.146 -Host: 192.168.62.154 Finance_PC (Group) -Finance_PC_192.168.41.125 Testing_PC (Group) -Host: 192.168.129.1 -Host: 192.168.129.97 -Host: 192.168.59.81 -Host: 192.168.59.82" 

data = ".*? (?= \(group\))" 
a = re.findall(data, source) 
print a 

答えて

1

は私がスペースに続いて一つ以上の英数字文字(A-Za-z0-9_)に一致し\w+(?= \(Group\))発現と(Group)を使用したいですグループオブジェクト名の形式については、アンダースコアの後に1つ以上の大文字が必要です。

>>> re.findall(r"\w+_[A-Z]+(?= \(Group\))", source) 
['IT_PC', 'HR_PC', 'Finance_PC', 'Testing_PC'] 

それとも、あなたにもGroupが必要な場合:

>>> re.findall(r"\w+ \(Group\)", source) 
['IT_PC (Group)', 'HR_PC (Group)', 'Finance_PC (Group)', 'Testing_PC (Group)'] 
>>> re.findall(r"\w+_[A-Z]+ \(Group\)", source) 
['IT_PC (Group)', 'HR_PC (Group)', 'Finance_PC (Group)', 'Testing_PC (Group)'] 
+0

おかげでalecxe、どのように私も "(グループ)" という文字列を返すことができます。このように['IT_PC(グループ)'、 'HR_PC(グループ)'、 'Finance_PC(グループ)'、 'Testing_PC(グループ)'] – kafter2

+0

@ kafter2は確かに答えを更新しました。希望が役立ちます。 – alecxe

+0

はい、役立ちます。迅速なお返事をありがとう ;) – kafter2

関連する問題