簡體   English   中英

正則表達式在字符串之前返回單詞-python

[英]Regular Expression return the word before a string - python

我正在編寫一個python腳本,想要匹配一個大文件中的所有Group對象名稱,原始數據的示例如下:

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

我所需的輸出應如下所示:

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

我正在嘗試使用以下正則表達式來匹配我所需的結果,但它僅返回第一個['IT_PC(Group)']。 對我有什么建議嗎,謝謝。

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

我將使用\\w+(?= \\(Group\\))表達式,該表達式將匹配一個或多個字母數字字符( A-Za-z0-9_ ),后跟一個空格和一個(Group)

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

或者,您甚至可以更詳細地說明組對象名稱格式,並在下划線后要求一個或多個大寫字母:

>>> 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)']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM