[英]Replace strings in a string by a substring of those strings
假設我有一個這樣的字符串:
s = '(X_xy09 and X_foobar or (X_abc123 and X_something))'
我想把它變成
'(xy09 and foobar or (abc123 and something))'
然后 - 在這個特殊情況下 - 我可以做到
s.replace('X_', "")
它提供了所需的輸出。
但是,在我的實際數據中,可能不僅有X_
而且還有其他前綴,因此上述replace
語句不起作用。
我需要的是替代
大寫字母后跟下划線和任意字母和數字序列
通過
第一個下划線后的所有內容。
因此,要提取我可以使用的所需元素:
import re
print(re.findall('[A-Z]{1}_[a-zA-Z0-9]+', s))
打印
['X_xy09', 'X_foobar', 'X_abc123', 'X_something']
我現在怎樣才能取代這些元素
'(xy09 and foobar or (abc123 and something))'
?
如果您只需要替換大寫字母后跟下划線,則可以使用正則表達式r'[AZ]_'
。
s = '(X_xy09 and X_foobar or (X_abc123 and X_something))'
re.sub(r'[A-Z]_', '', s)
如果您沒有提到其他標准,則可能需要添加它。 (例如,您的某些目標值遵循單詞邊界,而某些目標值遵循括號。)如果您有像XY_something
這樣的輸入,則上面可能會給出錯誤的輸出。 這取決於您對輸出的期望。
另一個re.sub()
方法:
import re
s = '(X_xy09 and X_foobar or (X_abc123 and X_something))'
result = re.sub(r'[A-Z]_(?=[a-zA-Z0-9]+)', '', s)
print(result)
輸出:
(xy09 and foobar or (abc123 and something))
[AZ]_(?=[a-zA-Z0-9]+)
- (?=...)
正向前瞻斷言 ,確保被替換的[AZ]_
子串后面跟着字母數字序列[a-zA-Z0-9]+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.