Python Regex backreference匹配相反的大小写

Python Regex backreference匹配相反的大小写,python,regex,Python,Regex,在我开始之前,也许值得一提的是:从技术上讲,这不一定要用正则表达式来解决,只是当我开始解决这个问题时,我立刻想到了正则表达式,我很想知道是否有可能用正则表达式来解决 在过去的几个小时里,我一直在尝试创建一个正则表达式,它可以执行以下操作 正则表达式必须匹配一个十个字符长的字符串,前五个字符和后五个字符是相同的,但每个字符大小写相反 换句话说,如果取前五个字符,则将每个字符的大小写颠倒,这应该与字符串的最后五个字符相匹配 例如,正则表达式应该匹配abCDeABcdE,因为前五个字符和后五个字符是

在我开始之前,也许值得一提的是:从技术上讲,这不一定要用正则表达式来解决,只是当我开始解决这个问题时,我立刻想到了正则表达式,我很想知道是否有可能用正则表达式来解决


在过去的几个小时里,我一直在尝试创建一个正则表达式,它可以执行以下操作

正则表达式必须匹配一个十个字符长的字符串,前五个字符和后五个字符是相同的,但每个字符大小写相反

换句话说,如果取前五个字符,则将每个字符的大小写颠倒,这应该与字符串的最后五个字符相匹配

例如,正则表达式应该匹配
abCDeABcdE
,因为前五个字符和后五个字符是相同的,但每个匹配字符的大小写是相反的。换句话说,
flip_case(“abCDe”)=“abCDe”

下面是几个应该匹配的字符串:
abcdeABCDE
abcdeABCDE
zYxWvZyXwV

以下是一些不应该匹配的:

  • abcdeABCDZ
    ,尽管大小写相反,但字符串本身并不匹配
  • abcdeABCDe
    是一个非常接近的匹配项,但不应该匹配,因为
    e
    的大小写不是相反的

这是我尝试的第一个正则表达式,这显然是错误的,因为它没有考虑案例交换过程

/([a-zA-Z]{5})\1/g
我的下一个想法是,下面的内容在正则表达式中是否可行,但我一直在阅读一些正则表达式教程,似乎在任何地方都找不到

/([A-Z])[\1+32]/g
这个新的正则表达式(显然不起作用)应该匹配一个大写字母,紧接着是它自己加上32-ascii,因此,换句话说,它应该匹配一个大写字母,紧接着是它的“小写对应物”。但是,就我而言,您不能在正则表达式中的反向引用中“添加ascii值”



而且,任何能够回答这个问题的人都可以获得额外的分数——在这个特定的例子中,所讨论的字符串长度为10个字符。是否可以创建一个匹配任意长度字符串的正则表达式?

您希望在Python
regex
模块中使用以下模式:

^(?=(\p{L})(\p{L})(\p{L})(\p{L})(\p{L}))(?=.*(?!\1)(?i:\1)(?!\2)(?i:\2)(?!\3)(?i:\3)(?!\4)(?i:\4)(?!\5)(?i:\5)$)

详细信息

  • ^
    -字符串的开头
  • (?=(\p{L})(\p{L})(\p{L})(\p{L})(\p{L}))
    -一个正面的前瞻,由五个捕获组组成,分别捕获前五个字母
  • (?=.**(?!\1)(?i:\1)(?!\2)(?i:\2)(?!\3)(?i:\3)(?!\4)(?i:\4)(?!\5)(?i:\5)$)
    -一种相反的前瞻,确保在字符串的末尾有5个字母与在开始时捕获的字母相同,但大小写不同
简言之,第一个前瞻中的第一个
(\p{L})
捕获
abcdeABCDE
中的第一个
a
,然后在第二个前瞻中,
(?!\1)(?i:\1)
确保从末尾开始的第五个字符相同(不区分大小写模式打开),并且
(?!\1)
消极前瞻确保此字母与捕获的字母不同

re
模块不支持内联修饰符组,因此此表达式不适用于该模式

Python:

输出:

Testing abcdeABCDE...
Matched
Testing abcdEABCDe...
Matched
Testing zYxWvZyXwV...
Matched
Testing abcdeABCDZ...
Testing abcdeABCDe...

您希望在Python
regex
模块中使用以下模式:

^(?=(\p{L})(\p{L})(\p{L})(\p{L})(\p{L}))(?=.*(?!\1)(?i:\1)(?!\2)(?i:\2)(?!\3)(?i:\3)(?!\4)(?i:\4)(?!\5)(?i:\5)$)

详细信息

  • ^
    -字符串的开头
  • (?=(\p{L})(\p{L})(\p{L})(\p{L})(\p{L}))
    -一个正面的前瞻,由五个捕获组组成,分别捕获前五个字母
  • (?=.**(?!\1)(?i:\1)(?!\2)(?i:\2)(?!\3)(?i:\3)(?!\4)(?i:\4)(?!\5)(?i:\5)$)
    -一种相反的前瞻,确保在字符串的末尾有5个字母与在开始时捕获的字母相同,但大小写不同
简言之,第一个前瞻中的第一个
(\p{L})
捕获
abcdeABCDE
中的第一个
a
,然后在第二个前瞻中,
(?!\1)(?i:\1)
确保从末尾开始的第五个字符相同(不区分大小写模式打开),并且
(?!\1)
消极前瞻确保此字母与捕获的字母不同

re
模块不支持内联修饰符组,因此此表达式不适用于该模式

Python:

输出:

Testing abcdeABCDE...
Matched
Testing abcdEABCDe...
Matched
Testing zYxWvZyXwV...
Matched
Testing abcdeABCDZ...
Testing abcdeABCDe...

你试过什么了吗?请把你收到的密码贴出来tried@CertainPerformance我能做到。。。但是,如果你是投否决票的人,那真的不是投否决票的理由。@CertainPerformance主要原因是,我不确定在匹配正则表达式时是否可以“翻转大小写”;或者在正则表达式中与匹配的ASCII值混淆。这只是其中的一件事,某个人,某个地方,在某个时候发现了,如果我能找到那个人,我会马上得到我的答案。@CertainPerformance另一个选择是,我非常乐意将我的问题改为:使用正则表达式,可以匹配一个小写字母,后跟它的“大写对应物”?,而且,从人们愿意给我的任何答案中推断出来。似乎您可以使用Python
regex
模块使用
(\p{Ll})(?!\1)(?i:\1)
(),不确定您是否可以使用Python
re
。您尝试过什么吗?请把你收到的密码贴出来tried@CertainPerformance我能做到。。。但是,如果你是投否决票的人,那真的不是投否决票的理由。@CertainPerformance主要原因是,我不确定在匹配正则表达式时是否可以“翻转大小写”;或者在正则表达式中与匹配的ASCII值混淆。这只是其中的一件事,某个人,某个地方,在某个时候发现了,而且