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

时间:2018-12-10 12:19:09

标签: python regex

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

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

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

表达式中不起作用的内容:可以接受如下内容: "1234567a'。如果字符串以'开头,则应以'结尾,以"开头时,字符串应以"结尾,等等。

我对正则表达式不是很坚强,所以让我问一下是否有更好的方法可以在不重复3次正则表达式的情况下对开始和结束执行相同的字符?

1 个答案:

答案 0 :(得分:0)

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

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

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

请参见regex demo

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