特定括号内的值

2024-04-19 13:12:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我的文本值如下所示,我需要找到在(之前打开array['nosql']与其对应的右括号之间的所有值。在(array['nosql']之间可能有空格或没有空格

整个文本

2118|"((value5  IN('X5','X1','Y1.6','Z2.3','NO23') AND value1  NOT LIKE('%RISP%')) OR ( value5 is null  AND ( array['nosql'] 
<@ type_list AND (array['S4'] <@ value_list OR array['Z6'] <@ value_list OR array['C2.6'] 
<@ value_list OR array['C2.5'] <@ value_list OR array['NO24'] <@ value_list)) AND ( array['no_key'] 
<@ value_list AND NOT array['RISP'] <@ value_list))) AND SL IN 
('FS025','FS028','FS071','FPG01','FPG02','FPG03','FPG04','FPG05','FPG06','FPG07','FPG09','FPG10','FPG12','FPG13','FPG16','FPG17','FPG18',
'FPG19','FPG26','FPG28','FPG29','FPG30','FPG31','FPG34','FPG35','FPG40','FPG32','FPG45','FPG55','FPG56','FPG57','FPG58','FPG66','FPG97',
'FPG32','FPG33','FPG36','FPG37','FPG42','FPG59','FPG60')"|""|"CT"|"{FPG44,FPG09,FPG18,FPG59,FPG32,FPG11,FPG56,FPG03,FPG10,FPG58,FPG37,
FPG04,FPG17,FPG60,FPG66,FS025,FPG28,FPG12,FPG16,FPG07,FPG31,FPG34,FPG40,FPG06,FPG55,FPG36,FPG19,FPG30,FS028,FPG26,FPG97,FPG42,FPG01,
FPG29,FPG02,FS071,FPG33,FPG05,FPG45,FPG35,FPG13}"|""|"XSQC Target"|""|""|"1"|"Active"|""|"Speed ACP_ASiR"|""

因为在array['nosql']之前的括号(有下面的所有记录,所以需要下面的输出。你知道吗

( array['nosql'] 
<@ type_list AND (array['S4'] <@ value_list OR array['Z6'] <@ value_list OR array['C2.6'] 
<@ value_list OR array['C2.5'] <@ value_list OR array['NO24'] <@ value_list))

我尝试正则表达式,但我不能得到具体的括号,我得到所有括号使用下面的代码,但我需要一个具体的。你知道吗

re.findall('\((.*?)\)',text)

Tags: orandin文本valuetypenotarray
2条回答

可以使用以下正则表达式提取感兴趣的数据:

(?<=\s(?=\(\sarray\['nosql'\]))([\s\w\['\]\s<@(.]*\)\))

  • (?<=\s(?=\(\sarray\['nosql'\]))。lookback查找后跟左括号和array['nosql']的空白。你知道吗
  • ([\s\w\['\]\s<@(.]*\)\))字符类以匹配空格\s、字母数字值\w、方括号[]、字符<@)。最后,匹配最后两个右括号))。你知道吗

你可以现场测试它。你知道吗


Python代码段:

>>import re
>>str = """2118|"((value5  IN('X5','X1','Y1.6','Z2.3','NO23') AND value1  NOT LIKE('%RISP%')) OR ( value5 is null  AND ( array['nosql'] 
<@ type_list AND (array['S4'] <@ value_list OR array['Z6'] <@ value_list OR array['C2.6'] 
<@ value_list OR array['C2.5'] <@ value_list OR array['NO24'] <@ value_list)) AND ( array['no_key'] 
<@ value_list AND NOT array['RISP'] <@ value_list))) AND SL IN 
('FS025','FS028','FS071','FPG01','FPG02','FPG03','FPG04','FPG05','FPG06','FPG07','FPG09','FPG10','FPG12','FPG13','FPG16','FPG17','FPG18',
'FPG19','FPG26','FPG28','FPG29','FPG30','FPG31','FPG34','FPG35','FPG40','FPG32','FPG45','FPG55','FPG56','FPG57','FPG58','FPG66','FPG97',
'FPG32','FPG33','FPG36','FPG37','FPG42','FPG59','FPG60')"|""|"CT"|"{FPG44,FPG09,FPG18,FPG59,FPG32,FPG11,FPG56,FPG03,FPG10,FPG58,FPG37,
FPG04,FPG17,FPG60,FPG66,FS025,FPG28,FPG12,FPG16,FPG07,FPG31,FPG34,FPG40,FPG06,FPG55,FPG36,FPG19,FPG30,FS028,FPG26,FPG97,FPG42,FPG01,
FPG29,FPG02,FS071,FPG33,FPG05,FPG45,FPG35,FPG13}"|""|"XSQC Target"|""|""|"1"|"Active"|""|"Speed ACP_ASiR"|"""""

>>data = re.findall(r"(?<=\s(?=\(\sarray\['nosql'\]))([\s\w\['\]\s<@(.]*\)\))",str)
>>print(data)

["( array['nosql'] \n<@ type_list AND (array['S4'] <@ value_list OR array['Z6'] <@ value_list OR array['C2.6'] \n<@ value_list OR array['C2.5'] <@ value_list OR array['NO24'] <@ value_list))"]

对于示例数据,您可以使用:

^{}

  • (?s)Mode点匹配换行符
  • \(匹配(
  • array\['nosql'\]匹配零次或多次空格字符,后跟array [nosql]

  • .*?匹配任意字符零次或多次非贪婪

  • \)\)匹配))

Demo

相关问题 更多 >