繁体   English   中英

使用正则表达式分离数据的最佳方法是什么

[英]Whats the best way to use regex for segregating data

我正在尝试编写一个程序来过滤跨环境访问,例如。 prod 不应访问 Dev/QA 对象,反之亦然。

到目前为止,我使用 IN 条件来检查和过滤掉这些数据,我如何使用正则表达式或其他有效方法来实现这一点? 请建议

示例代码:

lst_role_objects = []
for row in exct_role_obj:
if (('_PROD' in row[0] or  'PROD_'  in row[0] or '_PROD_'  in row[0]) and  ('PREPROD' not in row[0])):

    if ('_DEV' in (row[1].split('.')[0]) or  'DEV_'  in (row[1].split('.')[0]) or '_DEV_'  in (row[1].split('.')[0]) or '_QA' in (row[1].split('.')[0]) or  'QA_'  in (row[1].split('.')[0]) or '_QA_'  in (row[1].split('.')[0])         or '_PREPROD' in (row[1].split('.')[0]) or  'PREPROD_'  in (row[1].split('.')[0]) or '_PREPROD_'  in (row[1].split('.')[0])):


        print(row[0])
        print(row[1].split('.')[0])
        lst_role_objects.append((row[0],row[1]))


for row in exct_role_obj:
if ('_PREPROD' in row[0] or  'PREPROD_'  in row[0] or '_PREPROD_'  in row[0]) or 'QA'  in row[0]:

    if (( 'PREPROD' not in (row[1].split('.')[0]) ) and ( 'QA' not  in (row[1].split('.')[0]))):
        print(row[0])
        print(row[1].split('.')[0])
        lst_role_objects.append((row[0],row[1]))

for row in exct_role_obj:
if ('_DEV' in row[0] or  'DEV_'  in row[0] or '_DEV_'  in row[0] or              'DEV'  in row[0]) :

    if ( 'DEV' not in (row[1].split('.')[0]) ):
        print(row[0])
        print(row[1].split('.')[0])
        lst_role_objects.append((row[0],row[1]))




Sample data :
ROLE , OBJECTS
PROD_A_TEST , DA_DEV.PROD.SLS
PROD_A_TEST , DA_PROD.PROD.SLS
PROD_A_TEST , DA_PREPROD.PREPROD.SLS
PREPROD_A_TEST , DA_PREPROD.PREPROD.SLS
TEST_PREPROD_A , DA_PREPROD.PREPROD.SLS
TEST_PREPROD_A , DA_PROD.PREPROD.SLS

这应该适用于您在此处提到的所有情况。 没有正确测试。

lst_role_objects = []
for row in exct_role_obj:
    if re.match("^([A-Z_]*_)?PROD(_[A-Z_]*)?$", row[0]) and re.match("^([A-Z_]*_)?(DEV|QA|PREPROD)(_[A-Z_]*)?\..*", row[1]):
        print row[0], row[1].split('.')[0]
        lst_role_objects.append((row[0], row[1]))

for row in exct_role_obj:
    if re.match("^([A-Z_]*_)?(PREPROD|QA)(_[A-Z_]*)?$", row[0]) and re.match("^((?!([A-Z_]*)(PREPROD|QA))([A-Z_]*)\..*)$", row[1]):
        print row[0], row[1].split('.')[0]
        lst_role_objects.append((row[0], row[1]))

for row in exct_role_obj:
    if re.match("^([A-Z_]*_)?DEV(_[A-Z_]*)?$", row[0]) and re.match("^(?!.*(DEV)).*$", row[1]):
        print row[0], row[1].split('.')[0]
        lst_role_objects.append((row[0], row[1]))

自己尝试一下以包含缺少的测试用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM