我得到了这个正则表达式:
(\s|'|\")((?=.*[0-9])(?=.*[a-zA-Z]))([a-z0-9]{8})(\s|'|\")
搜索长度为8的具有一个小写字符和一位数字的字符串。该字符串需要用空格,双引号或双引号引起来。
表达式中不起作用的内容:可以接受如下内容:
"1234567a'
。如果字符串以'
开头,则应以'
结尾,以"
开头时,字符串应以"
结尾,等等。
我对正则表达式不是很坚强,所以让我问一下是否有更好的方法可以在不重复3次正则表达式的情况下对开始和结束执行相同的字符?
答案 0 :(得分:0)
如果要在字符串的末尾与字符串的开头匹配相同的字符,则在将字符捕获到捕获组中后,可以对字符使用backreference。
此外,要确保您在字符串的开头匹配,请在字符串的开头添加^
锚,在字符串的末尾添加$
锚:
r'''^([\s'"])(?=.*[0-9])(?=.*[a-zA-Z])[a-zA-Z0-9]{8}\1$'''
请参见regex demo
([\s'"])
是一个ID为1的捕获组,因此,末尾的\1
后向引用与第1组内存缓冲区中存储的文本匹配。