Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 回文的正则表达式_Python_Regex - Fatal编程技术网

Python 回文的正则表达式

Python 回文的正则表达式,python,regex,Python,Regex,我在寻找一种特殊的回文。规则是 长度为5 在前两个字符中,一个应为大写字母,另一个应为数字 第三个字符是小写字母 对我来说,主要的困难是小组参考文献的位置不确定。 如果我写”((([A-Z])([0-9]))|(([0-9])([A-Z]))[A-Z]\5\4),只会匹配K2i2K,而不会匹配2KiK2。为了匹配2KiK2,我必须写(([A-Z])([0-9])|(([0-9])([A-Z]))[A-Z]\8\7) 那么我应该如何编写正则表达式呢?谢谢。我想说的是,让你的生活变得简单,只需对两种

我在寻找一种特殊的回文。规则是

  • 长度为5
  • 在前两个字符中,一个应为大写字母,另一个应为数字
  • 第三个字符是小写字母
  • 对我来说,主要的困难是小组参考文献的位置不确定。 如果我写
    ”((([A-Z])([0-9]))|(([0-9])([A-Z]))[A-Z]\5\4)
    ,只会匹配
    K2i2K
    ,而不会匹配
    2KiK2
    。为了匹配
    2KiK2
    ,我必须写
    (([A-Z])([0-9])|(([0-9])([A-Z]))[A-Z]\8\7)


    那么我应该如何编写正则表达式呢?谢谢。

    我想说的是,让你的生活变得简单,只需对两种场景进行简单的交替:

    ([A-Z])([0-9])[a-z]\2\1|([0-9])([A-Z])[a-z]\4\3
    



    这将查找
    A-Z
    0-9
    A-Z
    0-9
    A-Z
    0-9
    A-Z
    A-Z
    A-Z
    0-9
    。虽然你可能认为它需要一个性能的打击,但它真的不应该。它将匹配
    A-Z
    并尝试走第一条路线(如果在任何一点失败,它将尝试匹配
    0-9
    并通过一个额外步骤失败),或者在
    A-Z
    失败并尝试从
    0-9
    开始匹配。无论哪种方式,它都只可能在成功/失败上多走一步。

    我想说的是,让你的生活变得简单,只需在两种情况下使用一个简单的替代方案:

    ([A-Z])([0-9])[a-z]\2\1|([0-9])([A-Z])[a-z]\4\3
    
    \b(?=.{5})(?=(?:[A-Z]\d|\d[A-Z]))(.)(.)[a-z]\2\1\b
    


    这将查找
    A-Z
    0-9
    A-Z
    0-9
    A-Z
    0-9
    A-Z
    A-Z
    A-Z
    0-9
    。虽然你可能认为它需要一个性能的打击,但它真的不应该。它将匹配
    A-Z
    并尝试走第一条路线(如果在任何一点失败,它将尝试匹配
    0-9
    并通过一个额外步骤失败),或者在
    A-Z
    失败并尝试从
    0-9
    开始匹配。无论哪种方式,它在成功/失败上都只可能多走一步

    \b(?=.{5})(?=(?:[A-Z]\d|\d[A-Z]))(.)(.)[a-z]\2\1\b
    
    这表明有5个字符,前两个是大写数字或数字-大写对

    一旦我们确定了这一点,剩下的就无关紧要了。我们捕获前两个字符,检查是否有小写字母,然后按相反顺序匹配前两个捕获

    我还用单词边界包围了正则表达式(<代码> \b>代码>),以确保单词中间不匹配。

    请看详细的解释

    这表明有5个字符,前两个是大写数字或数字-大写对

    一旦我们确定了这一点,剩下的就无关紧要了。我们捕获前两个字符,检查是否有小写字母,然后按相反顺序匹配前两个捕获

    我还用单词边界包围了正则表达式(<代码> \b>代码>),以确保单词中间不匹配。


    请详细说明。

    什么编程语言?为什么要匹配
    2KiK2
    ?@hjpotter92,因为它显然尊重他的要求!是的,我误解了这个问题。我假设第一个字符应该是字母表。什么编程语言?为什么要匹配
    2KiK2
    ?@hjpotter92,因为它显然尊重他的要求!是的,我误解了这个问题。我假设第一个字符应该是字母表。啊,真遗憾我没有这么做。不清楚前面的部分。我使用的是Python,文档中说“例如,
    Isaac(?=Asimov)
    将匹配
    'Isaac'
    ,前提是后面跟
    'Asimov'
    ”。在我看来,感兴趣的部分应该放在先行断言之前。但是为什么在断言之后是
    (.)
    ?前瞻断言了关于后面的字符的某些内容,但它不使用/匹配它们。一旦我们断言角色确实是我们正在寻找的,我们就可以简单地捕获任何东西(使用
    ()(
    构造),因为我们已经知道它们是好的。啊,很遗憾我没有这样做。不清楚前瞻部分。我使用的是Python,文档中说“例如,
    Isaac(?=Asimov)
    将匹配
    'Isaac'
    ,前提是后面跟
    'Asimov'
    ”。在我看来,感兴趣的部分应该放在先行断言之前。但是为什么在断言之后是
    (.)
    ?前瞻断言了关于后面的字符的某些内容,但它不使用/匹配它们。一旦我们断言角色确实是我们要寻找的,我们就可以简单地捕获任何东西(使用
    ()(
    构造),因为我们已经知道它们是好的。