python的re,findall 忽略大小写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的re,findall 忽略大小写相关的知识,希望对你有一定的参考价值。

MD5: 19:B0:F3:26:EA:C1:24:B9:38:47:34:72:04:49:FC:0C

SHA1: E3:3C:24:73:87:49:FF:2D:F2:A1:EC:00:9E:FC:40:82:8C:5B:5C:2B
SHA256: 94:26:B5:CC:24:3B:B9:48:C6:5E:0D:BA:49:9A:43:99:95:62:EF:BF:14:0E:4B:9E:D9:4A:CF:E0:88:4C:19:BB

我实际需要的是 md5 值 即 19:B0:F3:26:EA:C1:24:B9:38:47:34:72:04:49:FC:0C
这一段,试图通过findall 函数来匹配,但是发现有个问题就是 md5 不确实是大写还是小写,所以希望能在 findall 函数中 指定 忽略大小写,谷歌无果,求助度娘。感谢
或者指示一条更简洁的方式 直接提取出 19:B0:F3:26:EA:C1:24:B9:38:47:34:72:04:49:FC:0C

参考技术A

没那几个人说的那么麻烦,只需要加一个参数,如下:

import re

SHA = 'AC:B0:F3:26:EA:C1'

result1 = re.findall(r'ac:.*:c1',SHA) # 这样是搜不到的,因为大小写不匹配

result2 = re.findall(r'ac:.*:c1',SHA,re.IGNORECASE) # 这是能搜到的,已忽略大小写

print('未忽略大小写搜索结果:',result1)

print('忽略大小写搜索结果:',result2)

结果:

运行结果

参考技术B pattern = re.compile(r"(?i)MD5: *(\S+)")

pattern = re.compile(r"MD5: *(\S+)", re.I)

然后

pattern.findall(text)本回答被提问者采纳
参考技术C 给你的正则前面加上一个(?i)就可以忽略大小写了
直接提取出md5值也是可以的, 你要给我具体一点的信息, 比如你搜索的string的例子

字符串忽略大小写的搜索和替换

需求:字符串忽略大小写搜索和替换

解决:
  • 使用re.IGNORECASE
import re

text = 'UPPER PYTHON, lower python, Mixed Python'


f = re.findall("python", text, flags=re.IGNORECASE)
print(f)
s, n = re.subn("python","snake",text, flags=re.IGNORECASE)
print(s)
print(n) # 返回匹配的次数
缺陷
替换之后的字符串与被替换的大小写不能保持一致
解决:
def matchcase(word):
    def replace(m): # 匹配的结果 如:PYTHON
        text = m.group()
        if text.isupper():
            return word.upper()
        elif text.islower():
            return word.lower()
        elif text[0].isupper():
            return word.capitalize()
        else:
            return word

    return replace


if __name__ == '__main__':
    s = re.sub('python', matchcase('snake'), text, flags=re.IGNORECASE)
    print(s)

以上是关于python的re,findall 忽略大小写的主要内容,如果未能解决你的问题,请参考以下文章

python re

python 正则表达式(RE)笔记1

python3: 字符串和文本

Python regex - 忽略括号作为索引?

如何通过python忽略正则表达式中的html注释标签

正则-flags参数扩展