6

より大きな文字列からシステム名を解析する必要があります。システム名には、「ABC」の接頭辞と数字が続きます。いくつかの例は次のとおりです。

ABC500
ABC1100
ABC1300

システム名を解析する必要がある完全な文字列は、以下の項目のいずれかのようになります。

ABC1100 - 2ppl
ABC1300
ABC 1300
ABC-1300
Managers Associates Only (ABC1100 - 2ppl)

最後のコードを見る前に、かなりうまく機能する次のコードがありました。

string[] trimmedStrings = jobTitle.Split(new char[] { '-', '–' },StringSplitOptions.RemoveEmptyEntries)
                           .Select(s => s.Trim())
                           .ToArray();

return trimmedStrings[0];

しかし、ABC の前に他のテキストがたくさんある最後の例では失敗します。

ここでシステム名を解析する、よりエレガントで将来性のある方法を提案できる人はいますか?

4

4 に答える 4

7

これを行う1つの方法:

string[] strings =
{
    "ABC1100 - 2ppl",
    "ABC1300",
    "ABC 1300",
    "ABC-1300",
    "Managers Associates Only (ABC1100 - 2ppl)"
};

var reg = new Regex(@"ABC[\s,-]?[0-9]+");

var systemNames = strings.Select(line => reg.Match(line).Value);

systemNames.ToList().ForEach(Console.WriteLine);

プリント:

ABC1100
ABC1300
ABC 1300
ABC-1300
ABC1100

デモ

于 2013-05-20T13:59:03.840 に答える
2

正規表現を活用して、より良い結果を得ることができます。これでうまくいくはずで、それを証明する Rubular が[A-Za-z]{3}\d+ここにあります。次に、コードで次のように使用します。

var matches = Regex.Match(someInputString, @"[A-Za-z]{3}\d+");
if (matches.Success) {
    var val = matches.Value;
}
于 2013-05-20T14:00:14.847 に答える
1

あなたは間違いなくRegexこれを使用する必要があります。システム名の正確な性質によっては、次のようなもので十分であることがわかります。

Regex systemNameRegex = new Regex(@"ABC[0-9]+");

名前のABCRegex部分が変更される可能性がある場合は、次のように変更できます。

Regex systemNameRegex = new Regex(@"[a-zA-Z]+[0-9]+");

于 2013-05-20T13:59:14.420 に答える
1

これを解析するには、正規表現を使用できます。より良い表現があるかもしれませんが、これはあなたのケースでうまくいきます:

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      string txt="ABC500";

      string re1="((?:[a-z][a-z]+))";   
      string re2="(\\d+)"

      Regex r = new Regex(re1+re2,RegexOptions.IgnoreCase|RegexOptions.Singleline);
      Match m = r.Match(txt);
      if (m.Success)
      {
            String word1=m.Groups[1].ToString();
            String int1=m.Groups[2].ToString();
            Console.Write("("+word1.ToString()+")"+"("+int1.ToString()+")"+"\n");
      }
    }
  }
}
于 2013-05-20T13:58:41.170 に答える