[英]Replace captured groups with empty string in python
我目前有一個類似於以下的字符串:
str = 'abcHello Wor=A9ld'
我想要做的是找到'abc'和'= A9'並用空字符串替換這些匹配的組,這樣我的最終字符串就是'Hello World'。
我目前正在使用這個正則表達式,它正確地找到我要替換的組:
r'^(abc).*?(=[A-Z0-9]+)'
我試圖使用以下代碼替換這些組:
clean_str = re.sub(r'^(abc).*?(=[A-Z0-9]+)', '', str)
使用上面的代碼導致:
print(clean_str)
>>> 'ld'
我的問題是,如何使用re.sub用空字符串替換這些組並獲取我的“Hello World”?
捕獲其他所有內容並將這些組放入替換中,如下所示:
re.sub(r'^abc(.*?)=[A-Z0-9]+(.*)', r'\1\2', s)
這是一個天真的方法,但為什么你不能使用replace
兩次而不是正則表達式,如下所示:
str = str.replace('abc','')
str = str.replace('=A9','')
print(str) #'Hello World'
這對我有用。
re.sub(r'^(abc)(.*?)(=[A-Z0-9]+)(.*?)$', r"\2\4", str)
有沒有辦法可以......確保
abc
存在,否則不要替換第二種模式?
我知道你需要首先檢查字符串是否以abc
開頭,如果是,則刪除字符串中的abc
和=[0-9A-Z]+
模式的所有實例。
我建議:
import re
s="abcHello wo=A9rld"
if s.startswith('abc'):
print(re.sub(r'=[A-Z0-9]+', '', s[3:]))
這里, if s.startswith('abc'):
檢查字符串是否在開頭有abc
,那么s[3:]
從開頭刪除abc
截斷字符串,然后re.sub
刪除所有非重疊的實例=[A-Z0-9]+
模式。
請注意,您可以使用PyPi regex
模塊對一個正則表達式執行相同操作:
import regex
r = regex.compile(r'^abc|(?<=^abc.*?)=[A-Z0-9]+', regex.S)
print(r.sub('', 'abcHello Wor=A9ld=B56')) # Hello World
print(r.sub('', 'Hello Wor=A9ld')) # => Hello Wor=A9ld
這里,
^abc
- 僅在字符串開頭的abc
|
- 要么 (?<=^abc.*?)
- 檢查輸入開始時是否有abc
,然后是當前位置左側的換行符以外的任何數量的字符 =[A-Z0-9]+
- a =
后跟1+大寫ASCII字母/數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.