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) 那么我应该如何编写正则表达式呢?谢谢。我想说的是,让你的生活变得简单,只需对两种
”((([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'
”。在我看来,感兴趣的部分应该放在先行断言之前。但是为什么在断言之后是(.)
?前瞻断言了关于后面的字符的某些内容,但它不使用/匹配它们。一旦我们断言角色确实是我们要寻找的,我们就可以简单地捕获任何东西(使用()(
构造),因为我们已经知道它们是好的。