1

文字列を 2 つの異なるグループに分割する ac# コードを書いています。以下の例のように、文字列はパイプで区切られます。

  • 2 つのパイプの間に空きスペースがある可能性があります。
  • 「5GOdNF7Q5fK5O9QKiZefJEfO1YECcX1w」へのパイプ数は固定です。この場合、4 つのパイプがあります。

        string value = "122312121|test value||test value 2|5GOdNF7Q5fK5O9QKiZefJEfO1YECcX1w|123456789|123456789";
        const string sPattern = @"What should it be here?????";
        var regex = new Regex(sPattern);
        var match = regex.Match(value);
        if (match.Success)
        {
            var begin = match.Groups["begin"].Value;
            var middle = match.Groups["middle"].Value;
            var end = match.Groups["end"].Value;
        }
    

    コードの出力を次のように返そうとしています:

    • begin = "122312121|テスト値||テスト値 2|"
    • 中央 = "5GOdNF7Q5fK5O9QKiZefJEfO1YECcX1w"
    • 終了 = "|123456789|123456789"

ただし、私は正規表現に慣れていないため、変数 sPattern の正規表現を作成しようとしましたが、適切な正規表現を生成できませんでした。助けてもらえますか?ありがとう。

4

5 に答える 5

3

あなたが使用する必要がありますString.Split

 string [] sarray = value.Split('|')

それはあなたに配列を与えることです

{"122312121", "test value", "" , "test value" , "2", "5GOdNF7Q5fK5O9QKiZefJEfO1YECcX1w", "123456789", "123456789"}

そして入り5GOdNF7Q5fK5O9QKiZefJEfO1YECcX1wますsarray[5]

于 2013-01-14T20:58:14.220 に答える
2

これに一致する正規表現を探していて、.Split ではなく正規表現を使用したい場合は、次のようにします。

"^((.*?[|]){4})(.*?)([|].*)*$"

またはより明示的に:

"^(?<begin>(.*?[|]){4})(?<middle>.*?)(?<end>[|].*)*$"

これは、長い文字列が固定される前にパイプの数を言ったという事実に基づいています (4)。

コードは次のようになります。

string value = "122312121|test value||test value 2|5GOdNF7Q5fK5O9QKiZefJEfO1YECcX1w|123456789|123456789";
const string sPattern = @"^((.*?[|]){4})(.*?)([|].*)*$";
var regex = new Regex(sPattern);
var match = regex.Match(value);
if (match.Success)
{
    var begin = match.Groups[1].Value;
    var middle = match.Groups[3].Value;
    var end = match.Groups[4].Value;
}
于 2013-01-14T21:08:43.153 に答える
1

ここに別のものがあります:

^(?<begin>(.*?\|){4})(?<middle>.*?(?=\|))(?<end>.*)
于 2013-01-14T21:15:25.320 に答える
1

トリックは、パイプ文字をエスケープすることかもしれません:

const string sPattern = @"(?<begin>[^|]*\|[^|]*\|[^|]*\|[^|]*\|)" +
                        "(?<middle>[^|]*)" + 
                        "(?<end>\|.*)";
于 2013-01-14T21:03:32.617 に答える
1

String.Splitといくつかを使用しLinqて、必要なことを行うことができます

大まかな例:

string value = "122312121|test value||test value 2|5GOdNF7Q5fK5O9QKiZefJEfO1YECcX1w|123456789|123456789";
string[] split = value.Split('|');

string begin = string.Join("|", split.Take(4));
string middle = split.Skip(4).Take(1).FirstOrDefault();
string end = "|" + string.Join("|", split.Skip(5).Take(2));

戻り値

  • begin = "122312121|テスト値||テスト値 2|"
  • 中央 = "5GOdNF7Q5fK5O9QKiZefJEfO1YECcX1w"
  • 終了 = "|123456789|123456789"
于 2013-01-14T21:09:19.157 に答える