2017-07-14 59 views
0

對於正則表達式來說很新,所以我不知道如何做到這一點。僅供參考我正在使用Python,但我不確定這有多重要。正則表達式找到匹配的字符串,然後刪除空間之間的所有內容

我想要做的是這樣的:

string1 = 'Metro boomin on production wow' 
string2 = 'A loud boom idk why I chose this as an example' 
pattern = 'boom' 
result = re.sub(pattern, ' ____ ', string1) 
result2 = re.sub(pattern, ' ____ ', string2) 

現在這會給我"Metro ____in on production wow""a loud ____ idk why I chose this as an example

我要的是既"Metro ______ on production wow""a loud ____ idk why I chose this as an example"

基本上我想在另一個字符串中找到目標字符串,然後將該匹配字符串和2個空格之間的所有內容替換爲新字符串

有沒有辦法可以做到這一點?另外如果可能的話,最好在我的替換字符串中根據原始字符串的長度來設置可變長度。

+0

使用含有'boom'一個詞相匹配的正則表達式。 – Barmar

+0

使用@coldspeed答案,您應該能夠通過利用指定函數作爲're.sub'中的替換項的能力來調整替換的長度。看看're.sub'文檔。 – user1527491

回答

2

您正處在正確的軌道上。只是擴展你的正則表達式。

In [105]: string = 'Metro boomin on production wow' 

In [106]: re.sub('boom[\S]*', ' ____ ', string) 
Out[106]: 'Metro ____ on production wow' 

而且,

In [137]: string2 = 'A loud boom' 

In [140]: re.sub('boom[\S]*', ' ____', string2) 
Out[140]: 'A loud ____' 

\S*符號匹配零個或更多的不是空間的一切。

要使用相同數量的下劃線的文字替換,指定一個lambda回調,而不是替換字符串:

re.sub('boom[\S]*', lambda m: '_' * len(m.group(0)), string2) 
+0

這對我不起作用,因爲在我的目標字符串後面也沒有任何東西 –

+0

@EdwardFu你試過了嗎?它確實有效。如果目標字符串之後什麼也沒有,它會匹配到最後,這就是你想要的,對吧? –

+0

@EdwardFu'\ S'僅僅是'[A-ZA-Z_]'和一堆你可能會在一個字找到其他字符(任何不是空格)的簡寫形式。這並不意味着「直到下一個空間」,沒有。 –

相關問題