2012-04-03 97 views
0

我喜歡用新字符串'MEMORY247'代替0.0MB,2GB,0Gb ...這個字符串,我嘗試了下面的RE,但它給出了錯誤的結果,請告訴我正確的正則表達式蟒正則表達式替換python

b =應用re.sub( 「\ d。(\ S \ W + b)」, 'MEMORY247', '0.0MB不夠2GB得多0GB更多的空間3.4gb')

由於「 Mukthar

+1

這是有點不清楚你想完成什麼。在你的問題中,你可以發佈A)什麼樣的字符串看起來像BEFORE替代,和B)相同的示例字符串AFTER替代? – 2012-04-03 07:35:22

回答

1

在這裏你去:

re.sub("\d+\.*\d*\w*", 'MEMORY247', '0.0Mb is not enough 2GB is much 0gb more space 3.4gb') 

這意味着:

  • \ d +找到至少一個數字
  • *有可能是一個點
  • \ d *可能有多個數字
  • \ W *可能有一些字符。

這個表達式甚至更好:

"\d+\.*\d*[kKmMgG][bB]" 
+0

這個RE將匹配'3musketeers',以及'和1'。如何更具體一些? – 2012-04-03 07:39:01

+0

不公平,對於給定的字符串它將工作。誰說輸入是完全隨機的? – HWende 2012-04-03 07:40:17

+0

所以它匹配的錢0.00rs對待作爲內存,並給出錯誤的結果..請告訴我這個確切的解決方案.. – user1308308 2012-04-03 07:40:57

1

請嘗試以下

>>>st='0.0Mb is not enough 2GB is much 0gb more space 3.4gb' 
>>>re.sub('(\d+\.*\d*((MB)|(GB)))','MEMORY247',st,flags=re.IGNORECASE) 
>>>'MEMORY247 is not enough MEMORY247 is much MEMORY247 more space MEMORY247' 
>>> 

模式您正在搜索是

  • 一些\ d +
  • 跟着一個可選的點。*
  • 跟着一個可選的號碼\ d *
  • 後跟GB或MB((MB)|(GB))

使匹配大小寫不敏感,將re.IGNORECASE作爲標誌傳遞