这是我的字符串:
"ab1 ab-1 f-12 g-12 ffff-123 456"
我想挑选出具有以下内容的内容:
最多2个数字
有效:ab1,ab-1,f-12,g-12
所以我创建了正则表达式:
[\w{1,2}]-?\d{1,2}
但它返回太多东西:
>>> re.findall('[\w{1,2}]-?\d{1,2}', "ab1 ab-1 f-12 g-12 ffff-123 456")
['b1', 'b-1', 'f-12', 'g-12', 'f-12', '456']
问题:
[\w{1,2}]
需要与-?
隔离.....我认为他们被困在一起[\w{1,2}]
获得尽可能小的匹配,例如来自b-1
的{{1}},当它最多可能匹配2个字符时,ab-1
有什么想法吗?
答案 0 :(得分:3)
RE应该是:
[a-z]{1,2}-?\d{1,2}
表达式[\w{1,2}]
表示任何一个字符,即{
,1
,,
,2
或}
请注意,在您的字符串中,这将与ff-12
匹配,因为ffff-123
的此部分与表达式匹配。如果您不希望发生这种情况,则需要在表达式周围添加\b
,以便它只在字边界处匹配。
答案 1 :(得分:1)
这个正则表达式应该是这样的:
\b[a-z]{1,2}-?[\d]{1,2}\b
这是因为\w
匹配所有alpha- 数字符号,包括您不希望在字符串中找到的所有数字。
由于此示例,因此在RE的边界上应该有\b
:ffff-123
。
没有\b
的RE会与此示例的部分匹配,但不应该这样,我们添加\b
以使其仅搜索单词的边界