以下代码打印的是空格而不是“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
答案 0 :(得分:7)
试试[0-9]+
。 *
转换为“零或更多”,并且在字符串的开头就有零个或多个数字。
答案 1 :(得分:3)
你的正则表达式应该是这个
pattern = '(?P<order>[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