Python正则表达式,匹配多个整数

时间:2011-07-20 14:34:05

标签: python regex

以下代码打印的是空格而不是“11”,我无法弄清楚原因。用[0-9]*替换[0-9]{1,2}打印'11'。任何人都可以帮忙吗?

import re
test_string = 'cake_11xlfslijg'
pattern = '.*(?P<order>[0-9]*)'
result = re.compile(pattern).search(test_string)
if result:
    print 'result'
    print result.group('order')
else:
    print result

4 个答案:

答案 0 :(得分:7)

试试[0-9]+*转换为“零或更多”,并且在字符串的开头就有零个或多个数字。

答案 1 :(得分:3)

你的正则表达式应该是这个

pattern = '(?P<order>[0-9]+)'
  1. 删除了第一个。*,因为它会对整个字符串进行贪婪的匹配。
  2. 制作[0-9] +因为它只会匹配数字,即使至少存在一个数字,否则它将返回无。

答案 2 :(得分:1)

因为*表示:正则表达式.*中的任意数量的重复都会匹配所有字符串,因为.表示任何字符,即包括[0-9]

答案 3 :(得分:0)

正则表达式模式需要最少的锚点。

使用'。'和'[0-9] ',只有可选符号。

尝试

import re

for test_string in ( 'cake_11xlfslijg',
                     'cake_uuxlfslijg'):
    pattern = '.*?(?P<order>[0-9]+)'
    result = re.compile(pattern).search(test_string)
    print test_string
    print 'result: ',repr(result.group('order')) if result else result
    print

给出

cake_11xlfslijg
result:  '11'

cake_uuxlfslijg
result:  None