背景
有正则表达式文件,其内容为各正则表达式的集合;根据正则表达式从数据源中抓取相应内容。
为方便正则表达式的编写与调试,写了以下程序。
源代码
#!/bin/python
import json
import re
import sys
if 3 != len(sys.argv):
print("参数个数错误 参数1 文本文件 参数2正则文件")
sys.exit(1)
src = open(sys.argv[1], "r")
src.seek(0,2)
len = src.tell()
src.seek(0,0)
src_str = src.read(len)
src.close()
print(src_str)
object = open(sys.argv[2], "r")
object.seek(0,2)
len = object.tell()
object.seek(0,0)
str = object.read(len)
object.close()
print(str)
json_reg = json.loads(str)
def json_split(dic_json):
if isinstance(dic_json, dict):
for key in dic_json:
if isinstance(dic_json[key], dict):
json_split(dic_json[key])
elif isinstance(dic_json[key], list) and key == "Search":
json_split(dic_json[key])
else:
print("other", key, dic_json[key])
elif isinstance(dic_json, list):
for key in dic_json:
m = re.search(key["SearchRegex"], src_str, re.M | re.X)
if m :
print(key["KeyName"], ": ", m.group(1))
else:
print("--------", key["KeyName"], " not found")
else:
print("no dict")
json_split(json_reg)
正则文件示例
{
"Search": [
{
"KeyName": "reg1",
"SearchRegex": "\\s*Tax\\s+(\\d+\\.*\\d*%)\\s+(\\d+,)*\\d*\\.*\\d*"
},
{
"KeyName": "reg2",
"SearchRegex": "\\s*Tax\\s+(\\d+\\.*\\d*%)\\s+(\\d+,)*\\d*\\.*\\d*"
},
{
"KeyName": "reg3",
"SearchRegex": "\\s*Tax\\s+(\\d+\\.*\\d*%)\\s+(\\d+,)*\\d*\\.*\\d*"
}
]
}
注意,最后一个规则项不要加逗号,不然程序会报错
使用方法
python3 xxx.py source-file regex-file