我在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] "
有人可以帮帮我吗?
答案 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',)