簡體   English   中英

有沒有辦法在Python的re.sub()中的替換字符串中使用正則表達式?

[英]Is there a way to use regular expressions in the replacement string in re.sub() in Python?

re模塊的Python中,有以下功能:

re.sub(pattern,repl,string,count = 0,flags = 0) - 返回通過替換repl替換字符串中最左邊非重疊模式而獲得的字符串。 如果未找到模式,則返回字符串不變。

我發現它可以像這樣工作:

print re.sub('[a-z]*\d+','lion','zebra432') # prints 'lion'

我想知道,是否有一種簡單的方法在替換字符串中使用正則表達式,以便替換字符串包含原始正則表達式/原始字符串的一部分? 具體來說,我可以做這樣的事情(這不起作用)?

print re.sub('[a-z]*\d+', 'lion\d+', 'zebra432')

我想要打印'lion432' 顯然,它沒有。 相反,它打印'lion\\d+' 有沒有一種簡單的方法可以在替換字符串中使用匹配正則表達式的部分?

順便說一句,這不是一個特例。 請不要認為數字總是在最后,單詞總是在開頭,等等。我想知道一般的所有正則表達式的解決方案。

謝謝

\\d+放在捕獲組(...) ,然后使用\\1來引用它:

>>> import re
>>> re.sub('[a-z]*(\d+)', r'lion\1', 'zebra432')
'lion432'
>>>
>>> # You can also refer to more than one capture group
>>> re.sub('([a-z]*)(\d+)', r'\1lion\2', 'zebra432')
'zebralion432'
>>>

來自文檔

反序列(例如\\6 )將替換為模式中第6組匹配的子字符串。

請注意,您還需要使用原始字符串,以便不將\\1視為轉義序列。

暫無
暫無

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

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