【问题标题】:Regex Match.NextMatch() for a string that is not consistentRegex Match.NextMatch() 用于不一致的字符串
【发布时间】:2013-01-04 18:22:39
【问题描述】:

我有这个输入字符串:

AT+CMGL=4\r\r\n+CMGL: 1,1,,155\r\nDFGDF312GF4J5457JG8J0JGKFJ345G67JHGFGHJ06FD45HJG86J958F4FHSGSDGFH23FJ24HGJH58G4D7D465HDK31HFDJCHGH8V7GD45231DFGF314J567V6GGK4GFJCHGKVGDJX765GHFCJX2X4537CCGHGK9VHJ3C2FJXJCGH\r\n+CMGL: 2,1,,126\r\nDFGDF312GF4J5457JG8J0JGKFJ345G67JHGFGHJ06FD45HJG86J958F4FHSGSDGFH23FJ24HGJH58G4D7D465HDK31HFDJCHGH8V7GD45231DFGF314J567V6GGK4GFJCHGKVGDJX765GHFCJX2X4537CCGHGK9VHJ3C2FJXJCGH\r\n+CMGL: 3,1,,148\r\nDFGDF312GF4J5457JG8J0JGKFJ345G67JHGFGHJ06FD45HJG86J958F4FHSGSDGFH23FJ24HGJH58G4D7D465HDK31HFDJCHGH8V7GD45231DFGF314J567V6GGK4GFJCHGKVGDJX765GHFCJX2X4537CCGHGK9VHJ3C2FJXJCGH\r\n\r\nOK\r\n

我想对这个提取两个捕获组进行正则表达式匹配,并使用 NextMatch() 方法遍历每个匹配项。

我可以实现不包括此字符串的开始 (AT+CMGL=4\r\r\n) 和结束 (\r\nOK\r\n) 的部分匹配,这对于第一次和最后一次迭代会有所不同。

这是我用于实现部分匹配的正则表达式:

\+CMGL: \d+,\d+,,(\d+)\\r\\n(.*?)\\r\\n

正则表达式的正确语法应该如何获得完全匹配?

EDIT: I would like to capture the pdu length (155) and the pdu itself (nDFGDF312GF4J5457JG8J0JGKFJ345G67JHGFGHJ06FD45HJG86J958F4FHSGSDGFH23FJ24HGJH58G4D7D465HDK31HFDJCHGH8V7GD45231DFGF314J567V6GGK4GFJCHGKVGDJX765GHFCJX2X4537CCGHGK9VHJ3C2FJXJCGH) for each NextMatch().

【问题讨论】:

  • 以及我们如何从该字符串中猜出您想要的内容..您需要指定..还有regex用于regularly发生模式不是 irregular 模式!
  • @Some1.Kill.The.DJ 我已经在帖子的编辑部分指定了它。好吧,只有整个字符串的第一部分和最后一部分不一样,其余部分将是常规出现的模式。在使用正则表达式使其适合之前,我可以进行一些字符串格式化,但我认为如果它可以通过正则表达式实现,那将是一个更好/更清洁的解决方案......

标签: c# regex


【解决方案1】:

您的regex 是正确的..您只需将singleline 模式与正则表达式一起使用

Regex myRegex = new Regex(yourRegex,RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach(Match m in myRegex.Matches(yourText))
{
    m.Groups[1].Value;//pdu length
    m.Groups[2].Value;//pdu buffer
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 2021-08-13
    • 2011-03-29
    相关资源
    最近更新 更多