【发布时间】:2016-11-19 09:26:55
【问题描述】:
以下是我的字符串集合,指的是从头到尾的路径,像ABC这样的每个元素都是一个城市终端:
"ABC-DEF-MNO-JKL-LOO"
"BYT-JKU-PLO-MNO"
"DEF-BYT-IOT-POC-LOO"
"LMN-RTX-PQS-JYY"
"LMN-PQS-IRJ"
我开发了以下正则表达式模式来满足业务需求:
要求1 - Start with ABC or DEF, pass via MNO or BYT, End with LOO,JYY,IRJ
Pattern 1 - `@"(^ABC|^DEF).*(MNO|BYT).*(LOO$|JYY$|IRJ$)";`
Result 1 - "ABC-DEF-MNO-JKL-LOO", "DEF-BYT-IOT-POC-LOO"
要求2 - Start with ABC or DEF, pass via MNO or BYT, exclude route with IOT and End with LOO,JYY,IRJ
Expected Result - "ABC-DEF-MNO-JKL-LOO", since the other route has IOT
Expected Pattern - `@"(^ABC|^DEF).*(MNO|BYT).*^(IOT).*(LOO$|JYY$|IRJ$)";`
但是这个没有提供任何结果
Successful Pattern - `@"(^ABC|^DEF).*(MNO|BYT.*^(IOT)).*(LOO$|JYY$|IRJ$)";`
但是我不相信,这是实现它的正确方法,任何人都可以帮助理解:
- 为什么预期模式无助于产生正确的结果,我不明白其中有什么问题
- 建议更好的正则表达式来达到相同的结果
编辑 1:
根据@Sebastian 提供的响应,以下模式也成功:
@"^(?:ABC|DEF).*(?:MNO|BYT)(?!.*IOT).*(?:LOO|JYY|IRJ)$"
但以下模式失败,当只有额外的.*
@"^(?:ABC|DEF).*(?:MNO|BYT).*(?!.*IOT).*(?:LOO|JYY|IRJ)$"
【问题讨论】:
标签: c# .net regex pattern-matching