????????最近遇到需要处理一个很大文件的情况,需求是提取满足以`(ASCII 十进制 96)开头’结束的字符串,例如xxxxx`abcdedg'。
????????尝试在shell脚本中用正则表达式提取。有点曲折,后来通过python实现了,后续的工作就顺利很多。
????????python 的re 模块提供了compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() , search() 和findall()?这几个函数使用。菜鸟教程是个好网站!
语法格式为:
re.compile(pattern[, flags])
参数:
????????看着还是挺抽象, 比如我这个例子,里面的pattern 不知道给什么,参考了一位大神的帖子,得到答案,真的不胜感激!
????????原来可以这样re.compile('<开始字符>.+<结束字符>')就表示匹配以<开始字符> 到<结束字符> 的内容。我这种情况,re.compile('`.+\'') 就是我想要的了。注意此处用到了转义字符\, 因为和包正则表达式的单引号冲突。
????????同时还学到,如果要匹配<开始字符>之前以及<结束字符>之后的内容,re.compile('<开始字符>(.+)<结束字符>')
import re, sys
filename = "multi.error"
result = []
i = 0
pattern = re.compile('`.+\'')
with open(filename, "r") as f:
lines = f.readlines()
with open ("result.txt", "w") as p:
for line in lines:
result = pattern.findall(line)
#因为每行只会有一个满足条件的内容,所以取数据第0个
p.write(result[0])
?如果line =?xxxxx`abcdedg'
运行结果如下:
`abcdedg'
靡不有初,鲜克有终。好好学习,天天向上!
参考内容:
1.?python利用正则表达式提取文本中特定内容 - ZhangHT97 - 博客园
2.?Python 正则表达式 | 菜鸟教程
|