使用[:numeric:]的Python正则表达式

时间:2009-06-15 01:05:18

标签: python regex bash

我在Python上遇到麻烦给我一个我没想到的结果。以下是示例代码:

number = re.search(" [0-9] ", "test test2 test_ 2 333")
print number.groups()

number = re.search(" [[:digit:]] ", "test test2 test_ 2 333")
print number.groups()

在第一个块中,我得到一个返回的对象但没有任何内容。在哪里我认为我应该得到字符串“2”。

在第二个区块中,我甚至没有得到一个对象,我在那里用字符串“2”。

当我在bash中执行此操作时,一切看起来都很好:

echo "test test2 test_ 2 333" | grep " [[:digit:]] "
echo "test test2 test_ 2 333" | grep " [0-9] "

有人可以帮帮我吗?

5 个答案:

答案 0 :(得分:3)

groups()方法返回捕获组。它确实返回组0,如果这是你所期望的。使用parens表示捕获组。例如:

>>> number = re.search(" ([0-9]) ", "test test2 test_ 2 333")
>>> print number.groups()
('2',)

对于您的第二个示例,Python的re模块无法识别“[:digit:]”语法。使用\d。例如:

>>> number = re.search(r" (\d) ", "test test2 test_ 2 333")
>>> print number.groups()
('2',)

答案 1 :(得分:2)

您缺少捕获内容的(),以便与groups()(和其他)函数一起使用。

number = re.search(" ([0-9]) ", "test test2 test_ 2 333")
print number.groups()

但这不起作用,因为python不支持[[:number:]]表示法

number = re.search(" ([[:digit:]]) ", "test test2 test_ 2 333")
print number.groups()

答案 2 :(得分:1)

这是你要找的吗?

>>> re.findall(r'([0-9])', "test test2 test_ 2 333")
['2', '2', '3', '3', '3']

答案 3 :(得分:1)

number = re.search(" [0-9] ", "test test2 test_ 2 333")
print number.group(0)

groups()只返回1组及以上的组(如果您习惯使用其他语言,则有点奇怪)。

答案 4 :(得分:0)

.groups()返回匹配括号内的值。此正则表达式没有任何由parens定义的区域,因此组不返回任何内容。你想要:

  
    
      

m = re.search(“([0-9])”,“test test2 test_ 2 333”)       m.groups()       ( '2',)