Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/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正则表达式,它匹配字符后跟/后跟相同字符,但大小写相同_Python_Regex - Fatal编程技术网

Python正则表达式,它匹配字符后跟/后跟相同字符,但大小写相同

Python正则表达式,它匹配字符后跟/后跟相同字符,但大小写相同,python,regex,Python,Regex,我正在尝试构建一个正则表达式,它将发现: aA、aA、bB、cC 但不适合:aB,aa,aa,aC,Ca -如果我们需要小写字母,我们要检查下一个/上一个字母是否为大写 -如果我们需要大写字母,我们要检查下一个/上一个字母是否为小写 -我们的正则表达式不应同时找到大小写字母 我希望任何字符后面/前面都有相同的字符,但大写。这可以通过re完成: import re import string pattern = re.compile('|'.join([''.join(i) for i in z

我正在尝试构建一个正则表达式,它将发现: aA、aA、bB、cC 但不适合:aB,aa,aa,aC,Ca

-如果我们需要小写字母,我们要检查下一个/上一个字母是否为大写 -如果我们需要大写字母,我们要检查下一个/上一个字母是否为小写 -我们的正则表达式不应同时找到大小写字母


我希望任何字符后面/前面都有相同的字符,但大写。

这可以通过
re
完成:

import re
import string

pattern = re.compile('|'.join([''.join(i) for i in zip(list(string.ascii_lowercase), list(string.ascii_uppercase))])
pattern.search(your_text)
如果您正在寻找一个重复的字母来切换大小写(从下到上或从上到下),那么您可以使用:

pattern = '|'.join([''.join(i) for i in zip(list(string.ascii_uppercase), list(string.ascii_lowercase))] + [''.join(i) for i in zip(list(string.ascii_lowercase), list(string.ascii_uppercase))])

这可以通过
re
完成:

import re
import string

pattern = re.compile('|'.join([''.join(i) for i in zip(list(string.ascii_lowercase), list(string.ascii_uppercase))])
pattern.search(your_text)
如果您正在寻找一个重复的字母来切换大小写(从下到上或从上到下),那么您可以使用:

pattern = '|'.join([''.join(i) for i in zip(list(string.ascii_uppercase), list(string.ascii_lowercase))] + [''.join(i) for i in zip(list(string.ascii_lowercase), list(string.ascii_uppercase))])
<>你可以这样做(注意它将用java、PCRE(PHP、R、Delphi)、Perl、.NET工作,但是不会使用ECMAScript(JavaScript,C++ <代码> STD::ReXeX <代码>),Re2(Go,Apple脚本))使用< /P> 见附录a和a:

该解决方案基于内联修饰符组
(?i:…)
,其中所有字符都以不区分大小写的方式处理,而其他部分则区分大小写(假定没有其他
(?i)
re.i

详细信息

  • (\p{L})
    -捕获到组1中的任何字母
  • (?!\1)
    -如果下一个字符与组1中捕获的字符完全相同,则会导致匹配失败的负前瞻-请注意,正则表达式索引仍然位于使用
    (\p{L})捕获的字符之后。
  • (?i:\1)
    -一个不区分大小写的修饰符组,包含对组1值的反向引用,但由于它以不区分大小写的方式匹配,因此它可以同时匹配
    a
    a
    -但前面的前瞻排除了具有备用大小写的变量(因为前面的
    \1
    以区分大小写的方式匹配)
re
解决方案呢?

re
中,您不能将模式的一部分设置为可选,因为模式的任何部分都不区分大小写。此外,
re
不支持修改器组

您可以使用类似于

import re
rx = r'(?i)([^\W\d_])(\1)'
print([x.group() for x in re.finditer(rx, ' aA, Aa, bB, cC but not aB, aa, AA, aC, Ca') if x.group(1) != x.group(2)])

  • (?i)
    -将整个正则表达式设置为不区分大小写
  • ([^\W\d])
    -将字母捕获到组1中
  • (\1)
    -相同的字母被捕获到组2中(不区分大小写,因此
    Aa
    Aa
    Aa
    Aa
    将匹配)
<>代码>如果x.GROUP(1)!= x.GROUP(2)条件过滤掉不需要的匹配。< /P> < P>你可以(注意它将与java、PCRE(PHP、R、Delphi)、Perl、.NET一起工作,但是不会使用ECMAScript(JavaScript,C++ <代码> STD::ReXEX <代码>),Re2(Go Apple脚本))使用< /P> 见附录a和a:

该解决方案基于内联修饰符组
(?i:…)
,其中所有字符都以不区分大小写的方式处理,而其他部分则区分大小写(假定没有其他
(?i)
re.i

详细信息

  • (\p{L})
    -捕获到组1中的任何字母
  • (?!\1)
    -如果下一个字符与组1中捕获的字符完全相同,则会导致匹配失败的负前瞻-请注意,正则表达式索引仍然位于使用
    (\p{L})捕获的字符之后。
  • (?i:\1)
    -一个不区分大小写的修饰符组,包含对组1值的反向引用,但由于它以不区分大小写的方式匹配,因此它可以同时匹配
    a
    a
    -但前面的前瞻排除了具有备用大小写的变量(因为前面的
    \1
    以区分大小写的方式匹配)
re
解决方案呢?

re
中,您不能将模式的一部分设置为可选,因为模式的任何部分都不区分大小写。此外,
re
不支持修改器组

您可以使用类似于

import re
rx = r'(?i)([^\W\d_])(\1)'
print([x.group() for x in re.finditer(rx, ' aA, Aa, bB, cC but not aB, aa, AA, aC, Ca') if x.group(1) != x.group(2)])

  • (?i)
    -将整个正则表达式设置为不区分大小写
  • ([^\W\d])
    -将字母捕获到组1中
  • (\1)
    -相同的字母被捕获到组2中(不区分大小写,因此
    Aa
    Aa
    Aa
    Aa
    将匹配)

如果x.group(1)!=x.group(2)
条件过滤掉不需要的匹配项。

您可以使用PyPi regex模块使用
(\p{L})(?!\1)(?i:\1)
(),但不是使用Python
re
。您知道如何使用Python re吗?请您解释一下您的解决方案是什么?使用Python
re
模块,您需要使用更简单的
(?i)([^\W\d))(\1)
并添加更多代码以检查匹配情况。您给出的第二个字符串
Aa
将与您匹配,但不在问题后面,因为它以大写字母开头。
Aa
将与之匹配。@LievenKeersmaekers不确定您所说的“纯任何风格的正则表达式”是什么意思。如果您是指“只使用正则表达式的任何风格”则不是。您可以使用PyPi正则表达式模块使用
(\p{L})(?!\1)(?i:\1)
(),但不能使用Python
re
。您知道如何使用Python re吗?您能解释一下您的解决方案是什么吗?使用Python
re
模块,您需要使用更简单的
(?i)([^\W\d)](\1)
并添加更多代码以检查匹配情况。您给出的第二个字符串
Aa
将与您匹配,但不在问题后面,因为它以大写字母开头。
Aa
将与之匹配。@LievenKeersmaekers