Regex 带有正则表达式python的数值范围
因此,我正在处理一个文本分析问题,并试图用Python中的正则表达式删除0到999之间的所有数字。我曾尝试使用Regex数值范围生成器获取正则表达式,但没有成功。我只能删除所有的数字 我试过几种正则表达式,但都不起作用。这是我试过的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
# 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之间的数字为
/\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步。