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

如何在Python中为正则表达式的一部分设置ignorecase标志?

充运浩
2023-03-14
问题内容

是否有可能在Python中实现以下简单的功能:

#!/usr/bin/perl
my $a = 'Use HELLO1 code';
if($a =~ /(?i:use)\s+([A-Z0-9]+)\s+(?i:code)/){
    print "$1\n";
}

字符串中间的记号字母总是大写。其余单词的字母可以有大小写(USE,USE,Use,CODE,CODE,CODE等)


问题答案:

据我所知,python正则表达式引擎不支持部分忽略大小写。这是一个使用不区分大小写的正则表达式的解决方案,该表达式随后测试令牌是否为大写。

#! /usr/bin/env python

import re

token_re = re.compile(r'use\s+([a-z0-9]+)\s+code', re.IGNORECASE)
def find_token(s):
    m = token_re.search(s)
    if m is not None:
        token = m.group(1)
        if token.isupper():
            return token

if __name__ == '__main__':
    for s in ['Use HELLO1 code',
              'USE hello1 CODE',
              'this does not match',
             ]:
        print s, '->',
        print find_token(s)

这是程序的输出:

Use HELLO1 code -> HELLO1
USE hello1 CODE -> None
this does not match -> None


 类似资料:
  • 问题内容: 在Perl中,可以执行以下操作(我希望语法是正确的…): 我想在Python中执行相同的操作,并在括号内的文本以$ 1之类的字符串形式显示。 问题答案: 请参阅:Python正则表达式匹配对象

  • 问题内容: 我需要这样的匹配器: 问题是它不是简单的ASCII。我知道在这种特殊情况下,我可以将[\ u00FC \ u00DC]用于ü,但是我需要更加通用(从其他匹配器组构建正则表达式)。所以根据javadocs: 默认情况下,不区分大小写的匹配假定只匹配US- ASCII字符集中的字符。可以通过将UNICODE_CASE标志与该标志一起指定来启用Unicode感知的不区分大小写的匹配。 谁能告

  • 问题内容: 这实际上可行吗?我有一些很长的正则表达式模式规则,这些规则很难理解,因为它们无法一次放入屏幕。例: 反斜杠或三重引号将不起作用。 编辑。我结束使用VERBOSE模式。现在是正则表达式模式的外观: 问题答案: 您可以通过引用每个段来分割正则表达式模式。无需反斜杠。 您还可以使用原始字符串标志,并且必须将其放在每个段之前。 参见文档。

  • 问题内容: 考虑以下(非常简化的)示例字符串: 如您所见,它是两个值,以逗号分隔。 现在,我 可以 将其与以下内容匹配: 问题是,我必须写两次。对于小模式,这并不是很糟糕,但是对于更复杂的正则表达式,两次编写完全相同的东西会使结束模式变得庞大而繁琐。这似乎也是多余的。 我尝试使用命名捕获组: 但这没用,因为它寻找的是两次,而不是。 有什么方法可以保存模式的一部分,例如,以便以后可以在同一模式中使用

  • 问题内容: 我想要一个正则表达式从HTML页面提取标题。目前我有这个: 是否有一个正则表达式仅提取的内容,所以我不必删除标签? 问题答案: 用在正则表达式和中检索捕获的字符串(将返回如果没有找到结果,所以不要用直接):

  • 问题内容: 有没有办法在Python中调试正则表达式?而且我不是指尝试和尝试直到他们起作用的过程:) 这是在Perl中调试正则表达式的方式: 上面的代码在运行时在我的计算机上产生以下输出: 问题答案: p = re.compile(‘.*’, re.DEBUG) max_repeat 0 65535 any None >>>