我正在尝试编写正则表达式,它将匹配所有以结尾的XYZ
行: 除了以 . 结尾的行AAXYZ
。
一些例子:
ABCXYZ
- 应该匹配AAXYZ
- 不应该匹配ABXYZ
- 应该匹配
我从以下表达式开始,.*[^A][^A]XYZ$
但它不适用于示例 3
String[] lines=Regex.Split(input,"[\r\n]+")
.Where(x=>Regex.IsMatch(x,"^(?=.*(?<!AA)XYZ$).*$"))
.Select(x=>x.Value)
.ToArray();
如果您只需要正则表达式
^(?=.*(?<!AA)XYZ$).*$
正则表达式在这里似乎有点矫枉过正:
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
)