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

时间:2019-02-12 14:05:30

标签: 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 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位的数字,然后保留其他数字即可。

谢谢您的帮助

3 个答案:

答案 0 :(得分:1)

您需要在模式字符串前面加上r来防止转义,以便使插入内容的人不会将\b与退格交换。另外,您可以像这样简化模式:

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

答案 1 :(得分:0)

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

因此,生成的正则表达式应类似于:\b[0-9]{1,3}\b

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

答案 2 :(得分:0)

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到3个0-9个字符来进行的。因为否定的前瞻至少需要2个字符,所以单个0仍然会有效。