【问题标题】:Numeric Ranges with a Regular Expression python带有正则表达式 python 的数值范围
【发布时间】:2019-02-12 14:05:30
【问题描述】:

所以我正在处理一个文本分析问题,我正在尝试使用 Python 中的正则表达式删除 0 到 999 之间的所有数字。我已经尝试过 Regex Numeric Range Generator 来获取正则表达式,但我没有成功。我只能删除所有数字。

我已经尝试了几个正则表达式,但没有成功。这是我尝试过的

# Remove numbers starting from 0 ==> 999
data_to_clean = re.sub('[^[0-9]{1,3}$]', ' ', data_to_clean)

我也试过这个:

# Remove numbers starting from 0 ==> 999
data_to_clean = re.sub('\b([0-9]|[1-8][0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9])\b', ' ', data_to_clean)  

这个:

^([0-9]|[1-8][0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9])$

还有这个:

def clean_data(data_to_clean):
    # Remove numbers starting from 0 ==> 999
    data_to_clean = re.sub('[^[0-9]{1,3}$]', ' ', data_to_clean)  
    return data_to_clean

我有很多数字,但我只需要删除小数点后 3 位以下的数字并保留其他数字。

感谢您的帮助

【问题讨论】:

  • 您的尝试中的这种组合不应该有效吗:\b[0-9]{1,3}\b?如果您检查:regex101.com/r/qDrobh/6 它应该可以工作
  • 你能发一个示例文本吗?应该在哪里替换数字?
  • **bonjour la commande 2000501784 est validée et pour autant je ne peux la réceptionner poste 30 merci d avance ** 我得到了同样的结果
  • 我应该删除 30

标签: regex python-3.x nlp numeric-ranges


【解决方案1】:

您需要在模式字符串前面加上 r 以防止转义,这样解释器就不会用退格键交换 \b。另外,您可以像这样简化模式:

data_to_clean = re.sub(r'\b([0-9]|[1-9][0-9]{1,2})\b', ' ', data_to_clean)

【讨论】:

  • 欢迎。请不要忘记upvote并接受aswer!
  • 不确定是否需要,但不包括前导零的数字(例如 000、001、...)我认为这是故意的,但值得一提
  • 我认为不应包含前导零,因为 op 尝试使用正则表达式数字范围生成器
  • 我更喜欢你的回答,然后是 JGNI,因为前瞻真的很昂贵,而且在这里没有必要。它还显示他的答案需要超过 400 步,而您的答案需要约 200 步。
【解决方案2】:

我认为您可以将尝试与单词边界 (\b) 和最后一次尝试 ([0-9]{1,3}) 结合使用。

因此生成的正则表达式应如下所示:\b[0-9]{1,3}\b

如果您查看演示:regex101.com/r/qDrobh/6 它应该替换所有 1 位、2 位和 3 位数字,并忽略更高的数字和其他单词。

【讨论】:

  • 即使使用这些正则表达式也不会删除数字。
  • 不客气,但不要忘记标记正确答案和/或投票给有帮助的 cmets。 @krisz 的答案对我来说看起来非常好,甚至考虑是否存在前导零。但它不会删除 000 例如
  • 好的@gaw。谢谢你的帮助
【解决方案3】:

从0到999的数字是

  1. 单个字符 [0-9]
  2. 两个字符 [1-9][0-9]
  3. 三个字符[1-9][0-9][0-9]

这给出了一个简单的正则表达式 /\b(?:[0-9]|[1-9][0-9]|[1-9][0-9][0-9])\b/ 但是我们在选项中有重复的字符类,因此我们可以将它们排除在外

/(?!\b0[0-9])\b[0-9]{1,3}\b/

这通过使用否定前瞻(?!\b0[0-9]) 来检查单词的开头,然后是 0,然后是忽略 01 等的数字,然后查找 1 到三个 0 - 9 字符。因为负前瞻需要至少 2 个字符,所以单个 0 仍然有效。

【讨论】:

  • 即使使用这些正则表达式也不会删除数字
猜你喜欢
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
相关资源
最近更新 更多