我必须验证下一个字符串格式:
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匹配,但我感兴趣的是为什么第一个正则表达式如上所述。
答案 0 :(得分:6)
您的第一个正则表达式不正确,因为它声明{/ 1}}在前三个项目后出现。
您的第二个正则表达式错误地匹配字符串,因为id
也匹配连字符。
你应该使用这个正则表达式:
.*
这是regex demo!
如果您觉得需要将正则表达式锚定到最后,请使用/^(?:[^-]+-){2}id/
!
如Tim Pietzcker所述,请考虑在项目末尾声明/^(?:[^-]*-){2}id.*$/
:
id