2014-06-24 57 views
0

字符串我怎麼可以搜索文本字符串,並在其後添加一個字符串類似如下:搜索在python

我想在一個文本搜索例如「約翰福音3 2 G」,如果它是還有我想後

I met John 3 2 G yesterday and..

添加字符串運行程序

I met John 3 2 G and his brother yesterday and..

後被稱爲數字不固定,他們是數字,但可以改變

我用re.sub但在這種情況下,當數字正在改變我怎麼能做到這一點?

我嘗試:

re.sub("John","John and his brother",text) 
+3

*我用過了。子*;你應該顯示你的嘗試 – vaultah

+1

你打算在字符串中搜索什麼?名字永遠是「約翰」嗎?下一位會一直是「數字大寫字母」嗎? – jonrsharpe

+0

是約翰將是相同的,但我怎麼能約翰N N資本後添加一個字符串? – user3771924

回答

0

您可以使用正則表達式模式匹配來告訴Python匹配「John」,後跟空格,後跟數字,後跟空格,後跟數字,後跟大寫字母「。

>>> re.sub(r"John\s(\d\s\d\s[A-Z])", r"John \1 and his brother", a) 
'I met John 3 2 G and his brother yesterday' 

\s =空白

\d =位數

[A-Z] = A和Z.

之間Captial信

周圍\d\s\d\s[A-Z]括號告訴Python來 「捕捉」,匹配圖案的一部分,允許我們使用\1在替換字符串中訪問它。

0

既然你知道,他們會電話號碼,但你不知道肯定的數字是什麼,你可以使用

text = re.sub(r'(\w+ \d+ \d+ \w+)',r'\1 and his brother',text) 

應該替換"I met <word> <number> <number> <word> yesterday and..."其中約翰和G可以是任何東西,只要它們以兩個數字之間的順序出現即可。

如果您需要它來替換第四個位置中的一個大寫字母,您可以將\w+更改爲[A-Z]

0

你可以試試下面的正則表達式,它使用正向前查找,

>>> import re 
>>> str = 'I met John 3 2 G yesterday and..' 
>>> m = re.sub(r'(John.*)(?=yesterday)', r'\1and his brother ', str) 
>>> m 
'I met John 3 2 G and his brother yesterday and..' 

說明:

  • (John.*)(?=yesterday)匹配所有這些,跟着是字符串約翰(包括約翰)高達字符昨天的字符串並將其存儲到一個組中。

  • 在替換部分,我們再次通過反向引用調用存儲的組。

+0

使用超前是更好的方法。剩餘答案在某些情況下會失敗。 –