RegEx用于特定的字符串模式

时间:2012-09-07 05:19:30

标签: c# regex visual-studio-2010

使用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是否可行,RegEx本身的解决方案是什么?

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

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

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

或者捕获每一组

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

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

此外,我认为您不希望在范围中包含管道(|),因为它可能会弄乱其余部分,因此[!-{]可能会更好