使用python测试正则表达式

背景

有正则表达式文件,其内容为各正则表达式的集合;根据正则表达式从数据源中抓取相应内容。
为方便正则表达式的编写与调试,写了以下程序。

源代码

#!/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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容