簡體   English   中英

RegEx用於替換列表中的特殊模式

[英]RegEx for replacing special patterns in a list

我一直在研究一個python腳本來發布關於我的pihole的一些信息,並且遇到了一個小問題。 我似乎無法像我想要的那樣讓re.sub為我工作。

我想要完成的是獲取netifaces.interfaces()的輸出,對我來說是['lo', 'ens4', 'tun0', 'tun1']並使它看起來像ens4, tun0, tun1

我試過用

netfaces = str(netifaces.interfaces())
netfaces = re.sub('\[|\'|lo|\'|\]', '', netfaces)

但它給了我這個輸出:

, ens4, tun0, tun1 

編輯:

謝謝@ the-fourth-bird

我擴展了他們給的正則表達式並且來到了這里

正則表達式測試

'lo'(?:,\\s*)?|[][')(]|(?:,\\s*)?'lo'

我的看法:

'lo'(?:,\\s*)? - 在字符串中搜索'lo',並刪除無處找到的內容

[][')(] - 刪除所有][ ' )(無論發現了什么

(?:,\\s*)?'lo' - 刪除所有, 'lo'無論發現了什么

這也適用於我正在獲得的os.getloadavg()輸出

目前尚不清楚為什么你生成了看起來像列表的字符串,但你可以使用這個正則表達式,

^[^,]+,\s*|'|\]

並用空字符串刪除它以獲得所需的字符串。

因為你只想刪除第一個逗號和它之前的所有內容,你需要^[^,]+,\\s*和休息你需要刪除所有引號使用']\\]

正則表達式演示

作為一種替代方式,我假設您最初將您的元素放在列表中,您應該更好地使用這種方法,它不依賴於正則表達式來獲得您的預期輸出。

arr = ['lo', 'ens4', 'tun0', 'tun1']
arr.remove('lo')
print(', '.join(arr))

打印您的預期輸出,

ens4, tun0, tun1

你得到這個結果的原因是你匹配4個替換,你也可以寫為[][']|lo但你不匹配逗號和后面的空格,這樣就不會被刪除。

如果你想從列表中刪除'lo'而不在開頭留下逗號和空格,你可以使用:

'lo'(?:,\s*)?|[][']
  • 'lo'(?:,\\s*)? 匹配lo后跟可選部分以匹配逗號和1+空白字符
  • | 要么
  • [][']匹配字符類[]列出的任何內容, '

替換為空字符串。

正則表達式演示 | Python演示

例如

import re
regex = r"'lo'(?:,\s*)?|[][']"
test_str = "['lo', 'ens4', 'tun0', 'tun1']"
result = re.sub(regex, "", test_str)

if result:
    print (result)

結果

ens4, tun0, tun1

暫無
暫無

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

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