【问题标题】:regex that filters out 'N' followed by any combination of digits过滤掉“N”后跟任意数字组合的正则表达式
【发布时间】:2018-06-19 19:18:19
【问题描述】:

我需要有关过滤掉“N”后跟任意数字组合的正则表达式的帮助。

import re
exp = "1+2+N32.23"
variable_refs = re.compile(r"([0-9]+)")
exp_template = re.sub(variable_refs, r'{key_\1}', exp)

电流输出: {key_1}+{key_2}+N{key_32}

预期输出: {key_1}+{key_2}+N32.23

【问题讨论】:

  • 您可以使用:re.sub(r'\b(?<!N)(\d+)', r'{key_\1}', exp)

标签: python regex python-3.x


【解决方案1】:

使用负面的后视regex

import re

exp = "1+2+N32.12"
variable_refs = re.compile(r"\b(?<!N|\.)([0-9]+)")
exp_template = re.sub(variable_refs, r'{key_\1}', exp)

print(exp_template)
# {key_1}+{key_2}+N32.12

【讨论】:

  • 假设我有 exp = "1+2+N30"。它应该返回 '{key_1}+{key_2}+N30' 但目前它返回 '{key_1}+{key_2}+N3{key_0}'
  • 如果我的 exp 也有小数怎么办?例如。 "1+2+N32.12"
  • 其他数字也可以是小数吗?喜欢1.22+2.34+ N32.12
  • 我已经更新了我的答案。请编辑您的问题并添加详细信息以帮助未来的读者。 :)
【解决方案2】:

试试这个:

import re
variable_refs = re.compile(r"\b(?<!N)([0-9])+")
exp_template = re.sub(variable_refs, r'{key_\1}', exp)

【讨论】:

    【解决方案3】:

    如果N 必须作为一个完整的“单词”匹配,您可以使用否定的后向查看(?&lt;!N)(?&lt;!\bN)

    import re
    exp = "1+2+N3"
    variable_refs = re.compile(r"(?<!N)([0-9]+)")
    exp_template = re.sub(variable_refs, r'{key_\1}', exp)
    print(exp_template)
    # => {key_1}+{key_2}+N3
    

    Python demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 2012-12-03
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      相关资源
      最近更新 更多