在括号里找些东西

2024-04-23 22:18:38 发布

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

我有这样一根线:

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

第一个是我得到的正确的一个,我想丢弃第二个和第三个。你知道吗

我认为问题在于:

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

因为我只想找到一些字母数字的东西,可能在第一对字母之间有符号,我不过滤这种情况。你知道吗


Tags: orintestre格式字母数字out
2条回答

您应该像(?:LD|OR)那样对替换进行分组,并且要匹配除()之外的任何字符,您可以使用[^()]*而不是.+.+匹配任何字符,尽可能多,因此它在括号中匹配)。你知道吗

这是一个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)-匹配ORLD的非捕获组
  • \(-a(字符
  • [^()]*-一个否定的字符类,匹配0+个字符,而不是()
  • \)COIL\(xxSF\[-)COIL(xxSF[子串
  • \d+-1+位
  • ]\.Flt\[-].Flt[子串
  • \d+]\.\d+-1+位,].子串和1+位

参见regex demo。你知道吗

提示(?:OR|LD)之前添加一个\b,将它们作为整词进行匹配(而不是作为NORNLD的一部分)。你知道吗

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

或(_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)

相关问题 更多 >