这几天在做一个正则化的任务,需要正则出一个文件中两个字符之间的所有东西,这是在查找过程中找到的一些方法,在此记录下来。(以下都是在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.