3

我正在尝试编写正则表达式,它将匹配所有以结尾的XYZ行: 除了以 . 结尾的行AAXYZ

一些例子:

  1. ABCXYZ- 应该匹配
  2. AAXYZ- 不应该匹配
  3. ABXYZ- 应该匹配

我从以下表达式开始,.*[^A][^A]XYZ$但它不适用于示例 3

4

2 回答 2

1
String[] lines=Regex.Split(input,"[\r\n]+")
                    .Where(x=>Regex.IsMatch(x,"^(?=.*(?<!AA)XYZ$).*$"))
                    .Select(x=>x.Value)
                    .ToArray();

如果您只需要正则表达式

^(?=.*(?<!AA)XYZ$).*$
于 2013-10-04T08:15:56.417 回答
1

正则表达式在这里似乎有点矫枉过正:

var matches = myInput.Split(new[] {'\n'}, StringSplitOptions.RemoveEmptyEntries)
                     .Where(x => x.EndsWith("XYZ") && !x.EndsWith("AAXYZ"))
                     .ToList();

如果您需要正则表达式,您可以执行以下操作:

^(|.|.*[^A].|.+[^A])XYZ$

这只是扩展了管道分隔交替中的所有可能性:

  • 简单地XYZ
  • 任何单个字符后跟XYZ(例如AXYZ
  • 零个或多个字符后跟一个非 A 和一个以上字符XYZ(例如QAXYZ, foobarBAXYZ
  • 一个或多个字符后跟一个非 A 和XYZ(例如XBXYZ, foobarXYZ
于 2013-10-04T08:19:31.230 回答