当前位置: 首页 > 面试题库 >

匹配char的Python RegEx,后跟/以相同的char开头,但大写/小写

伊羽
2023-03-14
问题内容

我正在尝试建立一个正则表达式,它将找到: aA,AA,bB,cC, 但不适合:aB,aa,AA,aC,Ca。

-如果我们忽略小写字母,我们要检查下一个/上一个字母是否是大写字母-如果我们对待大写字母,我们要检查下一个/上一个字母是否是小写字母-大写/小写字母都不能通过正则表达式找到

我希望任何字符都跟在/之前,但必须是大写。


问题答案:

您可以使用PyPi
regex模块进行操作
(请注意,它将与Java,PCRE(PHP,R,Delphi),Perl,.NET一起使用,但不适用于ECMAScript(JavaScript,C
++ std::regex),RE2(Go,Google Apps Script) ))使用

(\p{L})(?!\1)(?i:\1)

查看regex演示及其在Python中工作的证明:

import regex
rx = r'(\p{L})(?!\1)(?i:\1)'
print([x.group() for x in regex.finditer(rx, ' aA, Aa, bB, cC but not aB, aa, AA, aC, Ca')])
# => ['aA', 'Aa', 'bB', 'cC']

该解决方案基于内联修饰符组,(?i:...)在该组中,所有字符均以不区分大小写的方式处理,而其他部分则区分大小写(不允许有其他字符(?i)re.I)。

细节

  • (\p{L}) -进入第1组的任何信件
  • (?!\1) -如果下一个字符与第1组中捕获的字符完全相同,则负匹配将使匹配失败。-请注意,正则表达式索引仍然在用 (\p{L})
  • (?i:\1)-不区分大小写的修饰符组,其中包含对组1的值的后向引用,但由于它以不区分大小写的方式与之匹配a,因此可以将两者都匹配A-但是,前一个提前行排除了具有备用大小写的变体(因为前一个\1在区分大小写的方式)。

re解决方案呢?

在中re,您不能将模式的一部分设为可选,因为(?i)在模式的任何部分中,所有模式都不区分大小写。此外,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)])

请参阅Python演示。

  • (?i) -设置整个正则表达式不区分大小写
  • ([^\W\d_]) -一封信被捕获到第1组中
  • (\1)-同样的字母被捕获到第2组(不区分大小写,因此AaaAaaAA将匹配)。

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



 类似资料:
  • 问题内容: 这样做的目的是从用户那里获得一个句子并确定每个元音中出现了多少个。大部分是完成的,除了我不确定如何忽略大写和小写字母外,但我猜是equalsIgnoreCase或toUpperCase()。 我想也知道,如果有另一种方式做到这一点使用的一些其他类,或。我仍然是编程的新手,这一章让我丧命。 } 这里的代码 问题答案: 由于您正在比较原始字符, 应该已经是您使用Java的最佳方式。 但是,

  • 在Java或静态编程语言中,相当于这个C代码的是什么: 我试过这个: 但它不起作用。 ByteBuffer也不管用:

  • 问题内容: 我喜欢从getter方法中“猜测”属性名称。因此,“ getSomeAttribute”应转换为“ someAttribute”。 通常我会做类似的事情 很丑吧?我通常将其隐藏在一种方法中,但是有人知道更好的解决方案吗? 问题答案: 我认为您的解决方案很好。我认为没有比这更简单的方法了。

  • 问题内容: 为什么以下代码无法编译 但是以下确实可以编译 在这两种情况下,我不只是将整数值分配给char吗? 问题答案: 可以将A 分配给不带强制转换的,因为这是扩大的转换。反之,将a 转换为a 需要转换,因为这是缩小的转换。 另请参见JLS。第5章。转换和升级。

  • 描述 (Description) C库函数char *strtok(char *str, const char *delim)使用分隔符delim将字符串str分解为一系列标记。 声明 (Declaration) 以下是strtok()函数的声明。 char *strtok(char *str, const char *delim) 参数 (Parameters) str - 修改此字符串的内容

  • 描述 (Description) C库函数char *strcpy(char *dest, const char *src)将char *strcpy(char *dest, const char *src)指向的字符串复制到dest 。 声明 (Declaration) 以下是strcpy()函数的声明。 char *strcpy(char *dest, const char *src) 参数