我正在尝试编写正则表达式,该表达式将匹配以XYZ
结尾的所有行,除了以AAXYZ
结尾的行。
一些例子:
ABCXYZ
- 应匹配AAXYZ
- 不应匹配ABXYZ
- 应匹配我从以下表达式.*[^A][^A]XYZ$
开始,但它不适用于示例3
答案 0 :(得分:1)
String[] lines=Regex.Split(input,"[\r\n]+")
.Where(x=>Regex.IsMatch(x,"^(?=.*(?<!AA)XYZ$).*$"))
.Select(x=>x.Value)
.ToArray();
如果只需要正则表达式
^(?=.*(?<!AA)XYZ$).*$
答案 1 :(得分:1)
正则表达式在这里看起来有些过分:
var matches = myInput.Split(new[] {'\n'}, StringSplitOptions.RemoveEmptyEntries)
.Where(x => x.EndsWith("XYZ") && !x.EndsWith("AAXYZ"))
.ToList();
如果您需要正则表达式,您可以执行以下操作:
^(|.|.*[^A].|.+[^A])XYZ$
这简单地扩展了管道交替的所有可能性:
XYZ
XYZ
(例如AXYZ
)XYZ
(例如QAXYZ
,foobarBAXYZ
)XYZ
(例如XBXYZ
,foobarXYZ
)