亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將我的“拆分”代碼轉換為正則表達式

如何將我的“拆分”代碼轉換為正則表達式

斯蒂芬大帝 2022-06-28 16:49:16
我有一個raw.txt在下面。ok: [192.168.1.1] => {    "OS": "Ubuntu(Core) "}ok: [192.168.1.2] => {    "OS": "Ubuntu (Core) "  }ok: [192.168.1.3] => {    "OS": "CentOS (Core) "}ok: [192.168.1.3] => {    "OS":"CentOS (Core) "  }ok: [192.168.1.5] => {    "OS": "Red Hat(Core) "}ok: [192.168.1.6] => {    "OS": "CentOS (Core) "  }我的 Python 代碼如下所示如何轉換為可取的輸出f = open(r'raw.txt', 'r')s = f.read()list1 = s.split('\n')ip_list = []os_list = []for i in list1[::3]:    ip_list.append(i)for i in list1[1::3]:    os_list.append(i)y = [z[10:25] for z in os_list]os_l = [x.strip(' ').replace('"','').replace(' ','') for x in y]ip_l = [z[5:18] for z in ip_list]ip_l_rep = [x.strip(' ').replace(']','') for x in ip_l]{ip_l_rep[n]:os_l[n] for n in range(len(os_l))}我的輸出和預期低于{'192.168.1.1': 'Ubuntu(Core)', '192.168.1.2': 'Ubuntu(Core)', '192.168.1.3': 'CentOS(Core)', '192.168.1.5': 'RedHat(Core)', '192.168.1.6': 'CentOS(Core)'}由于在這個程序中使用了多個操作,我決定在正則表達式的幫助下編寫。我寫了一些偽代碼但沒有成功。喜歡提取\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}.我的代碼的任何增強也很感激
查看完整描述

2 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

您可以使用正則表達式來捕獲介于之間[]和之后的內容"OS": ":


import re

input = """

ok: [192.168.1.1] => {

    "OS": "Ubuntu(Core) "

}

ok: [192.168.1.2] => {

    "OS": "Ubuntu (Core) "

}

ok: [192.168.1.3] => {

    "OS": "CentOS (Core) "

}

ok: [192.168.1.3] => {

    "OS":"CentOS (Core) "

}

ok: [192.168.1.5] => {

    "OS": "Red Hat(Core) "

}

ok: [192.168.1.6] => {

    "OS": "CentOS (Core) "

}

"""

items = re.findall(r'\[(.*?)\].*?"OS": "(.*?)"', input, flags=re.S)

data = dict(items)  # only works as you have 2 items (IP, OSTYPE)


print(data)

# output: {'192.168.1.1': 'Ubuntu(Core) ', '192.168.1.2': 'Ubuntu (Core) ', '192.168.1.3': 'Red Hat(Core) ', '192.168.1.6': 'CentOS (Core) '}


查看完整回答
反對 回復 2022-06-28
?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

這會從引號之間的文本中去除不需要的空間":


import re


f = open(r'raw.txt', 'r')

text = f.read()

f.close()


pattern = r'\[(.+?)\].+?:\s*"\s*(.+?)\s*"'

result = dict(re.findall(pattern, text, flags=re.DOTALL))

print(result)

# {'192.168.1.1': 'Ubuntu(Core)', '192.168.1.2': 'Ubuntu (Core)', '192.168.1.3': 'CentOS (Core)', '192.168.1.5': 'Red Hat(Core)', '192.168.1.6': 'CentOS (Core)'}



查看完整回答
反對 回復 2022-06-28
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號