字符串不在正则表达式中

时间:2013-03-19 11:49:27

标签: c# regex

我想使用Regex在字符串中查找匹配项。还有其他方法可以找到我正在寻找的模式,但我对Regex解决方案很感兴趣。

Concider这些字符串

"ABC123"
"ABC245"
"ABC435"
"ABC Oh say can You see"

我想匹配查找“ABC”,然后是ANYTHING BUT“123”。什么是正确的正则表达式?

3 个答案:

答案 0 :(得分:1)

尝试以下测试代码。这应该做你需要的

string s1 = "ABC123";
string s2 = "we ABC123 weew";
string s3 = "ABC435";
string s4 = "Can ABC Oh say can You see";
List<string> list = new List<string>() { s1, s2, s3, s4 };
Regex regex = new Regex(@".*(?<=.*ABC(?!.*123.*)).*");
Match m = null;
foreach (string s in list)
{
    m = regex.Match(s);
    if (m != null)
        Console.WriteLine(m.ToString());
}

输出结果为:

ABC435
Can ABC Oh say can You see

这同时使用'Negative Lookahead' and a 'Positive Lookbehind'

我希望这会有所帮助。

答案 1 :(得分:1)

使用negative lookahead

/ABC(?!123)/

您可以检查字符串str中是否匹配:

Regex.IsMatch(str, "ABC(?!123)")

完整示例:

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string[] strings = {
            "ABC123",
            "ABC245", 
            "ABC435",
            "ABC Oh say can You see"
        };
        string pattern = "ABC(?!123)";
        foreach (string str in strings)
        {
            Console.WriteLine(
                "\"{0}\" {1} match.", 
                str, Regex.IsMatch(str, pattern) ? "does" : "does not"
            );
        }
    }
}

Live Demo

唉,我的上面的正则表达式会匹配ABC,只要它不跟123。如果您需要在ABC之后至少匹配一个不是123的字符(也就是说,在字符串本身/末尾不匹配ABC),则可以使用{{ 1}},点确保您在ABC(?!123).之后匹配至少一个字符:demo

我相信第一个正则表达式是你正在寻找的东西(只要“没有”可以被认为是“任何东西”ABC)。

答案 2 :(得分:0)

正则表达式的替代方法,如果您觉得这更容易使用。只是一个建议。

  List<string> strs = new List<string>() { "ABC123",
                                           "ABC245",
                                           "ABC435",
                                           "NOTABC",
                                           "ABC Oh say can You see" 
                                          };
  for (int i = 0; i < strs.Count; i++)
  {
    //Set the current string variable
    string str = strs[i];
    //Get the index of "ABC"
    int index = str.IndexOf("ABC");
    //Do you want to remove if ABC doesn't exist?
    if (index == -1)
      continue;
    //Set the index to be the next character from ABC
    index += 3;
    //If the index is within the length with 3 extra characters (123)
    if (index <= str.Length && (index + 3) <= str.Length)
      if (str.Substring(index, 3) == "123")
        strs.RemoveAt(i);
  }