Regex 使用TCL/Expect进行字符串解析

Regex 使用TCL/Expect进行字符串解析,regex,tcl,expect,Regex,Tcl,Expect,请帮我分析这个字符串。我需要的是这个部分43STX4P-4-2-C4 我想排除那些字符串,比如43STX4P-4-2-C1 43STX4P-4-2-C2 43STX4P-4-2-C3 稍后在命令中的变量中使用 请帮帮我我什么都试过了 编辑 r00t解决方案工作得很好,但它在字符串中可能并不总是43STX4P,它可能看起来像130SCX10-43SCX4L-43SCX4- 另一个注释是43STX4P-2-2-C3。。-2-2中的数字可能并不总是一个位数 编辑 这是我在网上研究和运气之后得出的结论

请帮我分析这个字符串。我需要的是这个部分43STX4P-4-2-C4 我想排除那些字符串,比如43STX4P-4-2-C1 43STX4P-4-2-C2 43STX4P-4-2-C3 稍后在命令中的变量中使用 请帮帮我我什么都试过了

编辑 r00t解决方案工作得很好,但它在字符串中可能并不总是43STX4P,它可能看起来像130SCX10-43SCX4L-43SCX4-

另一个注释是43STX4P-2-2-C3。。-2-2中的数字可能并不总是一个位数

编辑

这是我在网上研究和运气之后得出的结论

\"43STX4P-2-2-C1::TRCCMP=DISABLED,J0_EX=\"\",J0_FMT=16,J0_INC=\"??????????????
?\",J0_STAT=UNSPECIFIED,MAPPINGMODE=ASYNC,CHANNEL=NONE,MODULETYPE=XS-64.2B,AINST
MR=00-10,AINSCNTDWN=00-00,LOSPROP=LASERON,AINSREF=SYSTEM,RXPOWER=-99.00,TXPOWER=
0.69,DESCR=\"\":OOS-AUMA,FAF&MT\"
   "43STX4P-2-2-C2::TRCCMP=DISABLED,J0_EX=\"\",J0_FMT=16,J0_INC=\"??????????????
?\",J0_STAT=UNSPECIFIED,MAPPINGMODE=ASYNC,CHANNEL=1550,MODULETYPE=XS-64.2B,AINST
MR=00-10,AINSCNTDWN=00-00,LOSPROP=LASERON,AINSREF=SYSTEM,RXPOWER=-99.00,TXPOWER=
-99.00,DESCR=\"\":OOS-AUMA,FAF"
   \"43STX4P-2-2-C3::TRCCMP=DISABLED,J0_EX=\"\",J0_FMT=16,J0_INC=\"??????????????
?\",J0_STAT=UNSPECIFIED,MAPPINGMODE=ASYNC,CHANNEL=1550,MODULETYPE=XS-64.2B,AINST
MR=00-10,AINSCNTDWN=00-00,LOSPROP=LASERON,AINSREF=SYSTEM,RXPOWER=-99.00,TXPOWER=
-99.00,DESCR=\"\":OOS-AUMA,FAF"
   "43STX4P-2-2-C4::TRCCMP=DISABLED,J0_EX=\"\",J0_FMT=16,J0_INC=\"??????????????
?\",J0_STAT=UNSPECIFIED,MAPPINGMODE=ASYNC,CHANNEL=1550,MODULETYPE=XS-64.2B,AINST
MR=00-10,AINSCNTDWN=00-00,LOSPROP=LASERON,AINSREF=SYSTEM,RXPOWER=-99.00,TXPOWER=
-99.00,DESCR=\"\":OOS-AUMA,FAF"
   "43STX4P-4-2-C1::TRCCMP=DISABLED,J0_EX=\"\",J0_FMT=16,J0_INC=\"??????????????
?\",J0_STAT=UNSPECIFIED,MAPPINGMODE=ASYNC,CHANNEL=1550,MODULETYPE=XS-64.2B,AINST
MR=00-10,AINSCNTDWN=00-00,LOSPROP=LASERON,AINSREF=SYSTEM,RXPOWER=-99.00,TXPOWER=
-99.00,DESCR=\"\":OOS-AUMA,FAF"
   "43STX4P-4-2-C2::TRCCMP=DISABLED,J0_EX=\"\",J0_FMT=16,J0_INC=\"??????????????
?\",J0_STAT=UNSPECIFIED,MAPPINGMODE=ASYNC,CHANNEL=1550,MODULETYPE=XS-64.2B,AINST
MR=00-10,AINSCNTDWN=00-00,LOSPROP=LASERON,AINSREF=SYSTEM,RXPOWER=-99.00,TXPOWER=
-99.00,DESCR=\"\":OOS-AUMA,FAF"
   "43STX4P-4-2-C3::TRCCMP=DISABLED,J0_EX=\"\",J0_FMT=16,J0_INC=\"??????????????
?\",J0_STAT=UNSPECIFIED,MAPPINGMODE=ASYNC,CHANNEL=1550,MODULETYPE=XS-64.2B,AINST
MR=00-10,AINSCNTDWN=00-00,LOSPROP=LASERON,AINSREF=SYSTEM,RXPOWER=-99.00,TXPOWER=
-99.00,DESCR=\"\":OOS-AUMA,FAF"
   "43STX4P-4-2-C4::TRCCMP=DISABLED,J0_EX=\"\",J0_FMT=16,J0_INC=\"??????????????
?\",J0_STAT=UNSPECIFIED,MAPPINGMODE=ASYNC,CHANNEL=1550,MODULETYPE=XS-64.2B,AINST
MR=00-10,AINSCNTDWN=00-00,LOSPROP=LASERON,AINSREF=SYSTEM,RXPOWER=-99.00,TXPOWER=
-99.00,DESCR=\"\":OOS-AUMA,FAF"
   /* RTRV-STM64 */

告诉我,如果我的代码有任何缺陷,非常感谢你的帮助

Expect可以将字符串的部分与正则表达式匹配,并使与特定子表达式匹配的部分可用于脚本,如下所示:

set ports [regexp -inline -all {\w*-.-[0-9]+-C[0-9]+} $rawoutput]
现在,您要查找的值位于方便的变量
$id
中。或者由于超时或EOF而导致错误。你仍然需要找出剩下的代码

[“”]
是一种使语法突出显示有效的重新技巧。这与重新启动引擎的
相同


稍后,您可以根据需要使用lindex数据;)

您的解决方案效果很好,但我在扩展脚本后遇到了一个问题,43STX4P部分可能并不总是不同的,但它看起来总是像43STX4P-43SCX4-130SCX10-
expect {
    -re {[""]([\dA-Z]+-\d+-\d+-C\d+)::} {
        set id $expect_out(1,string)
    }
}
set result [regexp -all -inline {43STX4P-4-2-C.} $data]