使用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本身的解决方案是什么?
有更好的方法吗?
查
答案 0 :(得分:1)
如果我理解你的问题,正确的模式将是:
\|([!-|]{2}){2,7}\|
或者捕获每一组
\|([!-|]{2})([!-|]{2})([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?\|
不确定范围是否会直接起作用,因此如果简化范围不起作用,您可能需要执行[A-Za-Z!@#$......]
此外,我认为您不希望在范围中包含管道(|
),因为它可能会弄乱其余部分,因此[!-{]
可能会更好