正则表达式组恰好匹配n次

时间:2014-08-15 11:10:11

标签: python regex string

我必须验证下一个字符串格式:

text-text-id-text

分隔符是字符' - '。第三列必须始终为id。我写了下一个regex(在python中)验证字符串:

import re

s = 'col1-col2-col3-id' # any additional text at the end
                        # is allowed e.g. -col4-col5
print re.match('^(.*-){3}id(-.*)?$', s) # ok 
print re.match('^(.*-){1}id(-.*)?$', s) # still ok, is should not be

我尝试添加非贪婪模式,但结果仍然相同:

^(.*?-){1}id(-.*)?$

我的正则表达式中缺少什么?我可以像这样验证字符串:

>>> import re
>>> print re.split('-', 'col1-col2-col3-id')
['col1', 'col2', 'col3', 'id']

然后检查第三个元素是否与id匹配,但我感兴趣的是为什么第一个正则表达式如上所述。

1 个答案:

答案 0 :(得分:6)

您的第一个正则表达式不正确,因为它声明{/ 1}}在前三个项目后出现。 您的第二个正则表达式错误地匹配字符串,因为id也匹配连字符。

你应该使用这个正则表达式:

.*

这是regex demo

如果您觉得需要将正则表达式锚定到最后,请使用/^(?:[^-]+-){2}id/


Tim Pietzcker所述,请考虑在项目末尾声明/^(?:[^-]*-){2}id.*$/

id

这是UPDATED regex demo