簡體   English   中英

Python sed正則表達式匹配

[英]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)

注意:

  • BRE POSIX間隔量詞編寫時沒有轉義符, \\{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 

這是重新模塊文檔的指針:

  1. python2: https ://docs.python.org/2/library/re.html
  2. python3: https//docs.python.org/3/library/re.html

暫無
暫無

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

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