C# 特定字符串模式的正则表达式
使用C#,我将处理信息的字符数组,寻找以下模式: 一个管道(0x7C),2到7对字符,后跟另一个管道(0x7C) 另一种说法是: |1122[33][44][55][66][77]| 字符对由范围为33-124十进制(“!”到“|”)的字符组成 第3对到第7对是可选的,但如果它们出现,则按顺序出现,因此您可以C# 特定字符串模式的正则表达式,c#,regex,visual-studio-2010,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|
|1122| <---shortest
|112233|
|11223344|
|1122334455|
|112233445566|
|11223344556677| <---longest
| 1122 |如果我正确理解您的问题,正确的模式是:
\|([!-|]{2}){2,7}\|
或者捕捉每一组
\|([!-|]{2})([!-|]{2})([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?\|
不确定该范围是否会直接像那样工作,因此如果简化范围不工作,您可能需要执行[A-Za-Z!@#$…]
此外,我认为您不希望将管道(|
)包括在范围内,因为它可能会弄乱其他管道,因此[!-{]
可能会更好因此,我一直在研究它,并提出了{2,7}|对于正则表达式。问题仍然是如何做到这一点,并提取至少2对和可选的剩余5对?Ben,感谢您快速而优雅的回答。我只花了几分钟在Expresso中玩了这个表达式,它可以根据需要工作。正则表达式一经解决,看起来总是那么合乎逻辑。