首页 文章

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

提问于
浏览
0

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

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

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

什么在表达式中不起作用:这样的东西将被接受: "1234567a' . 如果字符串以 ' 开头,则应以 ' 结尾,当以 " 开头时,它应以 " 等结尾 .

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

1 回答

  • 0

    如果要将字符串末尾的相同char与其开头的char匹配,则可以在将char捕获到捕获组后使用backreference .

    此外,为了确保在字符串的开头匹配,在字符串的开头添加 ^ anchor,在字符串的末尾添加 $ anchor:

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

    regex demo

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

相关问题