我有这样一根线:
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")
格式
我正在尝试使用python2.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
第一个是我得到的正确的一个,我想丢弃第二个和第三个。你知道吗
我认为问题在于:
'\('+'.+'+'\)'
因为我只想找到一些字母数字的东西,可能在第一对字母之间有符号,我不过滤这种情况。你知道吗
您应该像
(?:LD|OR)
那样对替换进行分组,并且要匹配除(
和)
之外的任何字符,您可以使用[^()]*
而不是.+
(.+
匹配任何字符,尽可能多,因此它在括号中匹配)。你知道吗这是一个Python demo:
图案细节
(?:OR|LD)
-匹配OR
或LD
的非捕获组\(
-a(
字符[^()]*
-一个否定的字符类,匹配0+个字符,而不是(
和)
\)COIL\(xxSF\[
-)COIL(xxSF[
子串\d+
-1+位]\.Flt\[
-].Flt[
子串\d+]\.\d+
-1+位,].
子串和1+位参见regex demo。你知道吗
提示在
(?:OR|LD)
之前添加一个\b
,将它们作为整词进行匹配(而不是作为NOR
和NLD
的一部分)。你知道吗谢谢,我正在捕捉我想要的一切。只是一些需要过滤的东西。请看一些输出:
或(_1B21_A53021_2_En)或(_1_A21_Z53021_2)线圈(xxSF[9].Flt[15].3)
LD(_1B21_A53021_2_En)LD(_1_A21_Z53021_2)线圈(xxSF[9].Flt[15].3)
我只想捕捉最后一个“LD”或“or”,如下所示:
或(_1_A21_Z53021_2)线圈(xxSF[9].Flt[15].3)
LD(_1_A21_Z53021_2)线圈(xxSF[9].Flt[15].3)
相关问题 更多 >
编程相关推荐