python 如何正则出两个符号或字母之间的字符串

这几天在做一个正则化的任务,需要正则出一个文件中两个字符之间的所有东西,这是在查找过程中找到的一些方法,在此记录下来。(以下都是在python下实现的)

import re 
file = open(r'C:\\Users\Administrator\Desktop\文件名.out','rb')                  #读取文件
source = file.read()
source = source.decode('utf-8')

方法一:reg = re.findall(r".*a(.*)b",source) #该方法可以读到字符 ‘a’ 和’b’之间的所有字符,但是不能跨行,'a‘和’b’需要在同一行。

方法二:reg = re.findall(r'\[([\s\S]+?)\]',source) #该方法可以正则出[]之间的内容,但[]内好像必须有东西,可以跨行正则,即’[‘和‘]’可以不在同一行。[\s\S]表示匹配所有字符,包括换行符,[\w\W]也有相同的功能,其中[\s]表示空白匹配,[\S]表示非空白匹配。当然通配符’.‘也可以匹配字符,但是’.'不能匹配换行符。

方法三:reg= re.findall(r'\[((?:.|\n)*?)\]',source) # 和方法二功能一样,但就算 [ ] 内没有东西,也能读取出来。

方法四:reg = re.findall(r'(?<=a)\d+\.?\d*(?=b)', source) #可以读到‘a’ 和‘b’ 之间的数字。(?<=想要的字符)表示匹配该字符之后的字符串,(?=想要的字符)表示匹配该字符之前的字符串,而\d+.?\d* 表示读取数字,如果不是数字,就不会被匹配到。

以上re.findall返回的都是列表,列表的每个元素的type都是字符串(如果有的话)。

###**********************************
方法五:关于正则表达式的零宽断言,如下:

import re
mystr = 'a111223344bb'
my = re.findall(r".*a(.*)b",mystr)
print(my)
my1 = re.findall(r".*a(.*)(?<!b)b",mystr)   #正则匹配a  b之间的字符,并断言 b之前的字符串不会是b
print(my1)

#结果
#['111223344b']
#['111223344']

还是个菜鸟,有不对的地方,还请指出。很多都是从其他博客看来的,但是也忘记在哪看的了,就都没有标明了。

以上,仅作为个人记录。第一次写hhhhh.

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值