ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python---re

2022-08-21 09:01:31  阅读:180  来源: 互联网

标签:group python str1 --- re print 匹配 gdfd


python---re

python的re模块简单使用
re.findall, re.compile, re.match和re.search

re.findall

这个是最好用的,查找所有符合条件的,返回list,或None

import re

str1 = 'gdfd,good'
results = re.findall(r'g..d', str1)
print(results)

re.compile

编译一个正则表达式,用这个在多次调用正则时可能会快一些,把上面的例子改成使用这样的形式

import re

reobj = re.compile(r'g..d')
str1 = 'gdfd,good'
results = reobj.findall(str1)
print(results)

re.match & re.search

match和search都是匹配一次,match必须从开头匹配

match示例

import re

str1 = 'gdfd,good'
m = re.match(r'gdfd', str1)
if m:
    print(m.group(0))
else:
    print('Not found')
m = re.match(r'good', str1)
if m:
    print(m.group(0))
else:
    print('Not found')

结果:

gdfd
Not found

search示例

import re

str1 = 'gdfd,good'
s = re.search(r'gdfd', str1)
if s:
    print(s.group(0))
else:
    print('Not found')
s = re.search(r'good', str1)
if s:
    print(s.group(0))
else:
    print('Not found')

结果:

gdfd
good

对group的解释

group()和group(0)等价,是正则字符串匹配的所有内容
group(1)指捕获的第一个结果(第一个括号匹配的内容),之后类推

一些正则

有分组但不捕获

(?:hello)

一个名字为the_name的分组

(?P<the_name>hello)

使用已命名的分组

(?P<named_group>cool) (?P=named_group)

简单的ip域名匹配

ip_re = rb'(?P<ip>(?:\d{1,3}\.){3}\d{1,3})'
domain_re = rb'(?P<domain>(?:[-a-zA-Z0-9]+\.)+[a-zA-Z]+)'

更多正则和测试可以用这个网站,超级好用: https://regex101.com/

匹配bytes-like object

有时候需要匹配二进制数据,需要在正则表达式前加 b

# coding:utf8

# TypeError: cannot use a string pattern on a bytes-like object

import re

the_re = rb'Hello'
the_bytes = b' Hello fasdf'
result = re.findall(the_re, the_bytes)
print(result)

flag使用示例

可以给正则字符串添加一些标记,实现不同的功能。

re.I
re.IGNORECASE
进行忽略大小写匹配

re.S
re.DOTALL
让 '.' 特殊字符匹配任何字符,包括换行符;如果没有这个标记,'.' 就匹配除了换行符的其他任意字符。对应内联标记 (?s)

re.X
re.VERBOSE
这个标记允许你编写更具可读性更友好的正则表达式。通过分段和添加注释。空白符号会被忽略。当一个行内有 `#` 不在字符集和转义序列,那么它之后的所有字符都是注释。

一个匹配数字的示例:

.text:00401032 68 62 04 00 00    push    462h
.text:00401037 68 8C 7A 41 00    push    offset _Format  ; "%d\n"
.text:0040103C E8 C5 FF FF FF    call    _printf
.text:00401041 59                pop     ecx
.text:00401042 59                pop     ecx
.text:00401043 33 C0             xor     eax, eax
.text:00401045 C3                retn
import re
import struct

num_re = re.compile(
    rb"""
    \x68(.{4})  # 68 62 04 00 00    push    462h
    \x68.{4}    # 68 8C 7A 41 00    push    offset _Format  ; "%d\n"
    \xE8.{4}    # E8 C5 FF FF FF    call    _printf
    \x59        # 59                pop     ecx
    \x59        # 59                pop     ecx
    \x33\xC0    # 33 C0             xor     eax, eax
    \xC3        # C3                retn
    """,
    re.DOTALL | re.VERBOSE,
)

the_file = open("Hello.exe", "rb")
the_content = the_file.read()
the_file.close()

raw_data_list = num_re.findall(the_content)
for raw_data in raw_data_list:
    num = struct.unpack("<L", raw_data)[0]
    print(hex(num))
# 0x462

参考链接

  1. https://www.runoob.com/python/python-reg-expressions.html
  2. https://docs.python.org/zh-cn/3/library/re.html

2018/11/12

标签:group,python,str1,---,re,print,匹配,gdfd
来源: https://www.cnblogs.com/-rvy-/p/16609304.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有