【问题标题】:regular expression for substitue python替换python的正则表达式
【发布时间】:2012-04-03 07:22:55
【问题描述】:

我喜欢用新字符串 'MEMORY247' 代替 0.0MB,2GB,0Gb...我在 RE 下面尝试过的字符串,但它给出了错误的结果,请告诉我正确的正则表达式使用 python

b = re.sub("\d.(\s\w+b)",'MEMORY247','0.0Mb 不够 2GB 多了 0gb 空间 3.4gb')

谢谢' 穆克塔尔

【问题讨论】:

  • 有点不清楚您要完成什么。在您的问题中,您能否发布 A) 替换前的示例字符串是什么样的,以及 B) 替换后的相同示例字符串?

标签: python python-3.x


【解决方案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]"

【讨论】:

  • 此 RE 将匹配 3musketeers 以及 and1。来点更具体的怎么样?
  • 不公平,对于给定的字符串,它将起作用。谁说输入是完全随机的?
  • 所以它匹配钱 0.00rs 视为内存并给出错误的结果..请告诉我这个的确切解决方案..
【解决方案2】:

试试下面的

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

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多