Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python Regx排除字母数字字符串中的某些字母_Python 3.x - Fatal编程技术网

Python 3.x Python Regx排除字母数字字符串中的某些字母

Python 3.x Python Regx排除字母数字字符串中的某些字母,python-3.x,Python 3.x,如何使用正则表达式匹配只能包含17个字母数字字符且不包含字母“q”、“o”和“i”的字符串。 又名,只有字母和数字,而不是“q”、“o”和“i” 在python中可以分别完成两个条件: [a-z0-9]{17} [^qoi] 因此,除了指定有效字符间隔或使用AND将两个条件组合在一起外,python中是否有更优雅的方法可以指定要包含的字符,同时排除不希望包含的字符 [a-z0-9&&[^qoi]]Java语言 (例如,我想排除10个随机字母,指定每个间隔将非常繁琐。[a-bd-eh-ow-…]

如何使用正则表达式匹配只能包含17个字母数字字符且不包含字母“q”、“o”和“i”的字符串。 又名,只有字母和数字,而不是“q”、“o”和“i”

在python中可以分别完成两个条件:

  • [a-z0-9]{17}
  • [^qoi]
  • 因此,除了指定有效字符间隔或使用AND将两个条件组合在一起外,python中是否有更优雅的方法可以指定要包含的字符,同时排除不希望包含的字符
    [a-z0-9&&[^qoi]]
    Java语言

    (例如,我想排除10个随机字母,指定每个间隔将非常繁琐。
    [a-bd-eh-ow-…]

    如果没有这种方法,我只能接受python正则表达式的现实

    谢谢你的帮助! Erik这里有两个选项:

    分别检查每个条件

    使用两个正则表达式并确保它们都匹配

    import re
    test_case = "asdFghijalkdjflkjsd"
    re.match("^[A-Za-z0-9]{17}$", test_case) and re.match("^[^qoi]+$", test_case)
    
    明确列出哪些是合法的

    列出所有法定字母数字字符,不包括q、i和o

    import re
    test_case ="12345a78901234567"
    re.match("^[ABCDEFGHJKLMNPRSTUVWXYZabcdefghjklmnprstuvwxyz0-9]{17}$", test_case)
    

    当然,这可以使用范围进行压缩,例如
    A-HJ-NPR-Z
    ,等等。

    您可以将任何需要的内容放在方括号中。例如,要匹配除q、o和i之外的任何字母,您可以使用:

    [0-9abcdefghjklmnprstuvwxyz]
    
    您还可以指定多个范围,这可能会使跳过的字符更加明显:

    [0-9a-hj-npr-z]
    

    也许有更优雅的方法可以做到这一点,但基本概念是一样的:只在
    []中放入您想要匹配的字符

    @Ken White所以“a”“b”“c”只是一个示例,对于演示,我的意思是,它可以是类中任意数量的字母,因此我正在寻找一种优雅的通用方法,谢谢!那么你能展示一个真实的示例吗?@Ryan我在原始问题中添加了:)它需要是一个正则表达式吗,或者您可以对
    ^[a-z0-9]{17}\Z
    进行一次检查,并对
    [qoi]
    进行一次检查(?![^q]*[qoi])^[a-z0-9]{17}\Z享受吗