2014-02-24 41 views
1

我有一個文本文件,其內容是很喜歡下面如何搜索和替換正是

G12

G10,11

GO12

GO10,12

我我試圖做的是用''替換所有'G',但不能將'GO'替換爲'O'。

我試圖用正則表達式做的,所以首先我處理的線條沒有逗號

with open(file) as f: 
for line in f: 
if re.match(r"%s[0-9]+" % 'G', line): 
    input = line.strip('G') 

而且事實證明了「G10,11 \ n」字符串匹配的正則表達式模式無論如何,這讓我感到困惑。

我的陳述有什麼不對嗎,還是有沒有更簡單的方法來做到這一點? 非常感謝,

+0

'r「%s [0-9] +」%'G''將始終生成字符串「G [0-9] +」,然後將其用作正則表達式。 – poke

+0

謝謝大家的建議! – Floyd

回答

4

你有一些替代品在這裏。直接翻譯您的需求得到:G(?!O),您可以用空字符串替換它。這可能是做像這樣:

line = re.sub(r"G(?!O)", "", line) 

G匹配的G(?!O)比賽只有下列字符不是一個O

您可能需要使用G(?=\d)來代替G,後跟數字。

+0

謝謝,但我仍然想知道,爲什麼我的正則表達式「%s [0-9] +」與逗號相匹配,我認爲只有r「%s [0-9] +,[0-9 ] +「匹配G10,11這樣的行。 – Floyd

+1

@Floyd如果你從're.match'中存儲了結果並查看它匹配的結果,你可以看到它只會匹配'G10,11'中的'G10'。但是你只檢查「是否匹配」,然後自行處理該行。所以'G10'與'G10,11'相匹配,但是你再一次在'G10,11'上工作,這也是你看到這個部分的原因。 – poke

+0

@poke謝謝!我認爲理解你的解釋,但我怎麼寫一個正則表達式來避免這種不正確的匹配? – Floyd