Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带有正则表达式python的数值范围_Regex_Python 3.x_Nlp_Numeric Ranges - Fatal编程技术网

Regex 带有正则表达式python的数值范围

Regex 带有正则表达式python的数值范围,regex,python-3.x,nlp,numeric-ranges,Regex,Python 3.x,Nlp,Numeric Ranges,因此,我正在处理一个文本分析问题,并试图用Python中的正则表达式删除0到999之间的所有数字。我曾尝试使用Regex数值范围生成器获取正则表达式,但没有成功。我只能删除所有的数字 我试过几种正则表达式,但都不起作用。这是我试过的 # Remove numbers starting from 0 ==> 999 data_to_clean = re.sub('[^[0-9]{1,3}$]', ' ', data_to_clean) 我也试过: # Remove numbers star

因此,我正在处理一个文本分析问题,并试图用Python中的正则表达式删除0到999之间的所有数字。我曾尝试使用Regex数值范围生成器获取正则表达式,但没有成功。我只能删除所有的数字

我试过几种正则表达式,但都不起作用。这是我试过的

# 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[0-9]{1,3}\b

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

0到999之间的数字为

  • 单个字符[0-9]
  • 两个字符[1-9][0-9]
  • 三个字符[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到3个0-9字符。由于负前瞻至少需要2个字符,因此单个
    0
    仍将作为有效字符传递。

    您需要在模式字符串前面加一个
    r
    ,以防止转义,这样interpeter就不会用退格交换
    \b
    。此外,您还可以简化模式,如下所示:

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

    您尝试的这个组合是否应该起作用:
    \b[0-9]{1,3}\b
    ?如果您选择:它应该有效,您可以发布一个示例文本,其中数字应该被替换吗?**早安,命令2000501784,最有效,并为您提供最新的信息。我得到了相同的结果。我应该删除30。即使使用那些正则表达式,也不会删除数字。欢迎您,但是别忘了标记正确的答案和/或投票给有帮助的评论。@krisz的答案在我看来非常好,甚至考虑了前导零是否存在。但它不会删除000,例如ok@gaw。谢谢你的帮助,即使是那些固定的表达,它也不会删除数字欢迎。请不要忘记投票并接受回答!不确定是否需要,但不包括带前导零的数字(例如,000,001,…),我认为这是故意的,但值得一提的是,我假设不应包括前导零,因为op尝试使用正则表达式数值范围GeneratorI,更像您的答案,那么JGNI的,因为前瞻是非常昂贵的,没有必要在这里。它还显示他的答案需要>400步,而你的答案需要大约200步。