在括号之间找到一些东西

时间:2019-02-15 07:56:30

标签: python regex

我有一个这样的字符串:

LD(_030S.F.IN)OR(_080T_SAF_OUT)COIL(xxSF[4].Flt[120].0)

我只想查找OR(_080T_SAF_OUT)COIL(xxSF[4].Flt[120].0),但是OR也可以是LD_080T_SAF_OUT可能会有所不同,有时总是用字母数字和下斜杠表示。 COIL(xxSF[4].Flt[120].0),必须始终为COIL(xxSF["digits"].Flt["digits"]."digits")

格式

我正在尝试使用Python 2.7的re库。

m = re.search('\OR|\LD'+'\('+'.+'+'\)'+'+'\COIL+'\('+'\xxSF+'\['+'\d+'+'\].'+ Flt\['+'\d+'+'\]'+'\.'+'\d+', Text)

我的输出:

OR(abc_TEST_X)LD(xxSF[16].Flt[0].22
OR
LD(TEST_X_dsfa)OR(WASS_READY)COIL(xxSF[16].Flt[11].10

第一个是正确的,我要丢弃第二个和第三个。

我认为问题出在这里:

'\('+'.+'+'\)' 

因为我只想在第一对paréntesis之间找到一些字母数字的内容,并且可能带有符号,所以我没有过滤这种情况。

2 个答案:

答案 0 :(得分:0)

您应该对(?:LD|OR)之类的替代字符进行分组,并匹配()以外的任何字符,您可以使用[^()]*而不是.+({{ 1}}尽可能匹配任何字符,因此它在括号内匹配。

这里是Python demo

.+

模式详细信息

  • import re Text = 'LD(_030S.F.IN)OR(_080T_SAF_OUT)COIL(xxSF[4].Flt[120].0)' m = re.search(r'(?:OR|LD)\([^()]*\)COIL\(xxSF\[\d+]\.Flt\[\d+]\.\d+', Text) if m: print(m.group()) # => OR(_080T_SAF_OUT)COIL(xxSF[4].Flt[120].0 -与(?:OR|LD)OR匹配的非捕获组
  • LD-一个\(字符
  • (-否定的字符类,与除[^()]*(之外的0+个字符匹配
  • )-\)COIL\(xxSF\[子字符串
  • )COIL(xxSF[-1个以上数字
  • \d+-]\.Flt\[子字符串
  • ].Flt[-1个以上数字,\d+]\.\d+子字符串和1个以上数字

请参见regex demo

提示].之前添加\b,以使它们作为整个单词(而不是(?:OR|LD)NOR的一部分)匹配。

答案 1 :(得分:0)

谢谢,我正在捕捉我想要的一切。只是要过滤的其他东西。看一下一些输出:

OR(_1B21_A53021_2_En)OR(_1_A21_Z53021_2)COIL(xxSF [9] .Flt [15] .3);

LD(_1B21_A53021_2_En)LD(_1_A21_Z53021_2)COIL(xxSF [9] .Flt [15] .3);

我只想按如下方式捕获最后一个“ LD”或“ OR”:

OR(_1_A21_Z53021_2)COIL(xxSF [9] .Flt [15] .3);

LD(_1_A21_Z53021_2)COIL(xxSF [9] .Flt [15] .3);