【问题标题】:regex string enclosed by double quote or single quotes用双引号或单引号括起来的正则表达式字符串
【发布时间】:2019-05-11 08:15:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你在验证一个字符串吗?试试r'''^([\s'"])(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]{8})\1$'''
  • 那个人做的工作

标签: python regex


【解决方案1】:

如果您想将字符串末尾的字符与其开头的字符匹配,您可以在该字符被捕获到捕获组后使用backreference

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

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

regex demo

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多