提问者:小点点

用双引号或单引号括起来的正则表达式字符串


我得到了这个正则表达式:

(\s|'|\")((?=.*[0-9])(?=.*[a-zA-Z]))([a-z0-9]{8})(\s|'|\")

搜索长度为8的字符串,其中有一个小写字符和一个数字。字符串需要用空格、引号或双引号括起来。

表达式中不起作用的是:类似这样的东西将被接受:"1234567a'。如果字符串以'开头,它应该以'结尾,当以"开头时,它应该以"等结尾。

我不太擅长正则表达式,所以让我问一下,是否有更好的方法来强制执行相同的字符开始和结束,而不重复正则表达式3次?


共1个答案

匿名用户

如果您想在字符串末尾匹配与开头相同的char,则可以在将char捕获到捕获组后使用对该char的反向引用。

此外,为确保在字符串开头匹配,请在字符串开头添加^锚点,在字符串末尾添加$锚点:

r'''^([\s'"])(?=.*[0-9])(?=.*[a-zA-Z])[a-zA-Z0-9]{8}\1$'''

查看正则表达式演示

([\s'"])是ID为1的捕获组,因此,末尾的\1反向引用与存储在Group 1内存缓冲区中的文本匹配。