[英]RegEx for capturing and replacing all digits in a string except for special patterns
[英]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+空白字符 |
要么 [][']
匹配字符類[
, ]
列出的任何內容, '
替換為空字符串。
例如
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.