0

使用 C#,我将处理信息的字符数组,寻找以下模式:

一个管道 (0x7C),2 到 7 对字符,后跟另一个管道 (0x7C)。

换一种说法:

|1122[33][44][55][66][77]|

字符对由范围为十进制 33-124 的字符组成('!' 到 '|')。

第 3 到 7 对是可选的,但如果它们出现,则按顺序出现,所以你可以有

    |1122| <---shortest
    |112233|
    |11223344|
    |1122334455|
    |112233445566|
    |11223344556677| <---longest

我想 1) 找出字符数组中是否存在这种模式,2) 提取单个对。这些任务可以是分开的。我认为最好的方法是正则表达式,但到目前为止,我还没有想出一个表达式来完成工作。

RegEx 是否可行,RegEx 本身的解决方案是什么?

有没有更好的办法?

查克

4

1 回答 1

1

如果我正确理解您的问题,正确的模式将是:

\|([!-|]{2}){2,7}\|

或捕获每组

\|([!-|]{2})([!-|]{2})([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?\|

不确定该范围是否会直接那样工作,因此[A-Za-Z!@#$......]如果简化范围不起作用,您可能需要这样做

另外,我认为您不想|在范围内包含 pipe(),因为它可能会弄乱其余部分,因此[!-{]可能会更好

于 2012-09-07T05:27:32.720 回答