我得到了这个正则表达式:
(\s|'|\")((?=.*[0-9])(?=.*[a-zA-Z]))([a-z0-9]{8})(\s|'|\")
搜索长度为8的字符串,其中有一个小写字符和一个数字。字符串需要用空格、引号或双引号括起来。
表达式中不起作用的是:类似这样的东西将被接受:"1234567a'
。如果字符串以'
开头,它应该以'
结尾,当以"
开头时,它应该以"
等结尾。
我不太擅长正则表达式,所以让我问一下,是否有更好的方法来强制执行相同的字符开始和结束,而不重复正则表达式3次?
如果您想在字符串末尾匹配与开头相同的char,则可以在将char捕获到捕获组后使用对该char的反向引用。
此外,为确保在字符串开头匹配,请在字符串开头添加^
锚点,在字符串末尾添加$
锚点:
r'''^([\s'"])(?=.*[0-9])(?=.*[a-zA-Z])[a-zA-Z0-9]{8}\1$'''
查看正则表达式演示
([\s'"])
是ID为1的捕获组,因此,末尾的\1
反向引用与存储在Group 1内存缓冲区中的文本匹配。