簡體   English   中英

在python中用空字符串替換捕獲的組

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

查看在線Python演示

這里,

  • ^abc - 僅在字符串開頭的abc
  • | - 要么
  • (?<=^abc.*?) - 檢查輸入開始時是否有abc ,然后是當前位置左側的換行符以外的任何數量的字符
  • =[A-Z0-9]+ - a =后跟1+大寫ASCII字母/數字。

暫無
暫無

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

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