2

正規表現を使用して文字列内の一致を検索したいと思います。私が探しているパターンを見つける方法は他にもありますが、正規表現ソリューションに興味があります。

これらの文字列を検討してください

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

検索結果「ABC」の後にANYTHINGBUT「123」を続けて一致させたい。正しい正規表現は何ですか?

4

3 に答える 3

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

これは、「ネガティブルックアヘッド」と「ポジティブルックビハインド」の両方を使用します。

これがお役に立てば幸いです。

于 2013-03-19T12:20:40.157 に答える
1

ネガティブ先読みの使用:

/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"
            );
        }
    }
}

ライブデモ

残念ながら、上記の正規表現は、その後に。ABCが続かない限り一致し123ます。それ以降に少なくとも1文字一致する必要がある場合ABC(つまり、文字列自体/末尾で123一致しない場合)は、を使用できます。ドットは、 :demoの後に少なくとも1文字一致することを保証します。ABCABC(?!123).ABC

ただし、最初の正規表現はあなたが探しているものだと思います(「何もない」が「何でも」と見なされる限り:P)。

于 2013-03-19T13:29:57.350 に答える
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);
  }
于 2013-03-19T12:11:12.603 に答える