【问题标题】:regex re.sub replacing string with parts of itself正则表达式 re.sub 用自身的一部分替换字符串
【发布时间】:2018-02-19 14:41:13
【问题描述】:

我需要替换存储在 JSON 文件中的部分名称,例如替换:

"name":"S. tuberosum subsp. andigenum (ADG) 2-1-2-2" 

用这个:

"name":"S. tuberosum subsp. andigenum (ADG)" 

即我需要消除名称后面的数字和连字符。

我正在使用re.sub,但我无法找出正确的表达式,尤其是如何将字符串替换为其中的一部分。

我试过这个:

new_text = re.sub(r"(name.[:]..*)\s\d+-+", "name.[:]..*"  , initial_text)

【问题讨论】:

  • 除了要删除的数字之外,还有其他带连字符的数字吗?
  • 还有其他数字,但没有连字符

标签: python regex replace


【解决方案1】:

您只需将要删除的部分与re.sub 匹配,并将其替换为空字符串:

import re
string = '"name":"S. tuberosum subsp. andigenum (ADG) 2-1-2-2"'
print(re.sub('(\s(\d-)*\d)', '', string))

输出

"name":"S. tuberosum subsp. andigenum (ADG)"

【讨论】:

    【解决方案2】:

    试试这个:

    re.sub("(\d+-\d+-*)", "" , initial_text)

    这将替换 'number-number-(optional)' ,希望它有效

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      import re
      s = '"name":"S. tuberosum subsp. andigenum (ADG) 2-1-2-2"'
      new_s = re.sub('(?<=[A-Z]\))\s[\d-]+', '', s)
      

      输出:

      '"name":"S. tuberosum subsp. andigenum (ADG)"'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多