正则表达式量词

时间:2011-10-12 01:04:46

标签: python regex

我有一个正则表达式模式如下:

.*\b(?P<core>[A-Z][0-9]?\b.*)(?P<extra>\b[0-9]+[xX][0-9]+.*)?\.png

要匹配一些字符串,如下所示: -

UI SCREEN 5-1 F2 ROUND TAB REFLECTION 224x18px.png

在Python中,我得到以下结果

{u'core': u'F2 ROUND TAB REFLECTION 224x18px', u'extra': None}

而不是

{u'core': u'F2 ROUND TAB REFLECTION ', u'extra': u'224x18px'}

据我所知,正则表达式在python中默认是贪婪的。所以我认为它应该有用。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

表达式(?P[A-Z][0-9]?\b.*)可能不会按照您的想法执行...它将匹配:

  • 一个角色
  • 然后是一个数字,或不是
  • 然后是一个单词边界
  • 然后绝对是
  • 之后的一切

将所有内容吞至终止.png(应该是\.png

答案 1 :(得分:1)

在您第一次贪婪?

之后添加.*
import re
x = "UI SCREEN 5-1 F2 ROUND TAB REFLECTION 224x18px.png"
re.search(r'.*\b(?P<core>[A-Z][0-9]?\b.*?)(?P<extra>\b[0-9]+[xX][0-9]+.*)?.png', x).groups()

# OUTPUT
('F2 ROUND TAB REFLECTION ', '224x18px')

答案 2 :(得分:0)

你能像正在使用的那样编写正则表达式吗?因为我在你的正则表达式中看不到组名。

>>> re.match(r'(?P<core>[A-Z0-9- ]+) (?P<extra>[0-9]+[xX][0-9]+px)\.png', a).groups()
('UI SCREEN 5-1 F2 ROUND TAB REFLECTION', '224x18px')