正则表达式替换python

问题描述:

我喜欢用新字符串'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

在这里你去:

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

请尝试以下

>>>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作为标志传递