我的文本值如下,我需要找到(
之前的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)
答案 0 :(得分:1)
您可以使用以下正则表达式提取感兴趣的数据:
(?<=\s(?=\(\sarray\['nosql'\]))([\s\w\['\]\s<@(.]*\)\))
(?<=\s(?=\(\sarray\['nosql'\]))
。向后看以找到空格,然后在其前面加上方括号和array['nosql']
。([\s\w\['\]\s<@(.]*\)\))
字符类,以匹配空格\s
,字母数字值\w
,方括号[
和]
,字符<
,{{ 1}}和@
。最后,匹配最后两个括号)
。您可以实时here对其进行测试。
Python代码段:
))
答案 1 :(得分:1)
对于示例数据,您可以使用:
(?s)\(\s*array\['nosql'\].*?\)\)
(?s)
Mode(点匹配换行符)\(
匹配(
array\['nosql'\]
匹配零个或多个空白字符,后跟array [nosql]
.*?
将任意字符匹配零次或多次非贪婪
\)\)
匹配))