2013-02-26 51 views
1

我想删除3或小于3位的数字。有人可以帮助我一个这样做的正则表达式吗?如何创建匹配3或小于3位数字的正则表达式?

目前,我的代码删除了它找到的所有数字。

 # Cleans Numbers 
    def cleanNumbers(stringToClean): 
     stringToClean = re.sub(r'[0-9]*', r'', stringToClean) 

     print 'String after cleaning : %s' %stringToClean 

     return stringToClean 

数字将被空间包围。示例字符串我传递给函数:

一段时间后Win8客户端上的连接中断。 [持久] 123 1 22 333 4444 554665 645fdgf45 ds3434 457870978934787843 345342kl

我调用上面的功能如下:

# Main function, calls other functions   
def main(): 

    # Parsing the input query 
    searchQuery = open('input.txt', 'r').read() 
    print 'Input query : %s' %searchQuery 

    # Cleaning the input query 
    string = CleanUpText.cleanNumbers(searchQuery) 
+0

你能不能让你的心,如果你想“删除少于3位数字“或”3或少于3位数字“? – Jens 2013-02-26 21:16:53

+0

数字是否被空格或其他(非数字)字符包围,或者是什么?你有一些样本字符串? – iamnotmaynard 2013-02-26 21:24:42

+0

@iamnotmaynard没关系。如果数字被数字包围(?!),他们会是......更大的数字。根据定义,它们会比三位数字长,并且不会被删除。 – Madbreaks 2013-02-26 21:26:17

回答

5

\b[0-9]{1,3}\b找到最多三位数的数字块。

+0

op说了很多东西.. *如何创建一个正则表达式匹配3或小于3的数字* – ogzd 2013-02-26 21:23:32

+0

这对我有效。 stringToClean = re.sub(r'\ b [0-9] {1,3} \ b',r'',stringToClean)Removed - > 123 1 22 333 from input string。谢谢! P.S .:什么是操作? – Radz 2013-02-26 21:34:09

+0

我相信这是*原创海报* – ogzd 2013-02-26 22:07:29

-1

你可以使用正则表达式这样

r'\b[0-9]{1,2}\b' 

编辑:对不起写道:我的答案很快就没有真正思考。你必须使用边界,所以你不捕获3456例如

+1

不会捕获'1234'吗? – ogzd 2013-02-26 21:14:20

1
re.sub(r'[0-9]{,3}',r'',stringToClean) 
1

我已经纠正了问题,“3个或少于3”

鉴于这种情况,应该是简单的:\b\d{1,3}\b

相关问题