[英]Python sed regex matching
我試圖在我的Python腳本中使用re.sub()刪除一些字符串。
我使用的sed
命令是(在Linux上):
echo "helloworld-5b5cf484-g582f" | sed 's/-[a-z0-9]\\{5\\}$//' | sed 's/-[0-9]\\{10\\}$//' | sed 's/-[a-z0-9]\\{8,10\\}$//'
這將輸出helloworld
。
現在,使用Python,我嘗試為第一個sed
組執行此操作:
newstring = re.sub(r'(s/-[a-z0-9]\\{5\\}$//)', r'\\1', 'helloworld-5b5cf484-g582f')
但它僅輸出副本,即helloworld-5b5cf484-g582f
我該如何執行sed
命令?
編輯:
我的問題不是關於我的正則表達式。 輸入String比我作為示例呈現的字符串更復雜。 問題是關於如何正確使用re.sub()和我使用的正則表達式:)
sed
s/-[a-z0-9]\\{5\\}$//
命令被翻譯為re.sub(r'-[a-z0-9]{5}$', '', s)
。
注意:
\\{5\\}
=> {5}
s/<pattern>/<repl>/
表示將<pattern>
替換為<repl>
,並且等於re.sub('<pattern>', '<repl>', s, 1)
(因為沒有g
sed命令中的修飾符,將1
傳遞給re.sub
以僅替換一個(首先出現)。 修飾符在re.sub
作為選項或標志傳遞,例如re.sub(r'-[a-z0-9]{5}$', '', s, flags=re.I)
( re.I
是不區分大小寫的修飾符)。 注意,沒有必要使用g
修飾符,因為re.sub
默認替換所有出現的內容。
您可以在Python re
文檔中了解有關Python regex語法的更多信息。
您的正則表達式與您要執行的操作不匹配。
實際上,您的代碼是用'helloworld-5b5cf484-g582f'中的第一個匹配項(或類似的內容)替換以連字符開頭的5個字符長的字母數字字符字符串。
因為您的字符串不是以連字符開頭,所以不會發生這種情況。
如果我是正確的話,您想用空字符串替換任何以連字符開頭的5個字符或8個字符長的小寫字母數字字符串。
這可以通過以下代碼實現:
碼 newstring = re.sub("(-[a-z0-9]{8})?(-[a-z0-9]{5})?", '', 'helloworld-5b5cf484-g582f')
結果
print newstring helloworld
這是重新模塊文檔的指針:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.