0

本当は「??」の前後を合わせたいのですが、私のコードは以下です:

//enter code here
        Regex r = new Regex(@"(?'value'[0-9\-\./TSE]{1,}) \?\?(?'index'[A-Za-z:]{1,}");
        string s=
@"39 ??Issue:
9 ??Pages:
1307-1325 ??DOI:
10.1109/TSE.2013.14 ??Published:";

ご覧のとおり、次のものを一致させたいと思います。

value="39" index = "Issue:"
value="9" index = "Pages:"
value="1307-1325" index = "DOI:"
value="10.1109/TSE.2013.14" index = "Published:"

正規表現の 1 つか 2 つの文字を変更するだけで、この問題を解決できると思います。誰でも助けることができますか?

4

1 に答える 1

1

の前後の情報が必要なだけで、??常にその形式 (値 ?? インデックス) である場合、正規表現はこれにはやり過ぎです。String.Splitを使用するだけです。

string s= @"39 ??Issue:
9 ??Pages:
1307-1325 ??DOI:
10.1109/TSE.2013.14 ??Published:";

string[] splitValues = s.Split(new string[] { "??", "\r\n" }, StringSplitOptions.None);

for (int i = 0; i < splitValues.Length; i += 2)
{
    Console.WriteLine("value={0} index={1}", splitValues[i].Trim(), splitValues[i + 1].Trim());
}

これは改行で分割され、??探している出力が得られます。

value="39" index = "Issue:"
value="9" index = "Pages:"
value="1307-1325" index = "DOI:"
value="10.1109/TSE.2013.14" index = "Published:"

上記のコードは、文字列を??and \r\n(行末/改行) で分割し、要素の配列を生成します。最初の要素は最初の値、2 番目の要素は 2 番目の値、3 番目の要素は 2 番目の最初の値です。行、4 番目の要素は 2 行目の 2 番目の値などです。

for ループは非常に単純です。このi += 2部分はループ カウンターを (通常の 1 [ i++] ではなく) 2 だけインクリメントするだけなので、入力の各行の値とインデックスを出力します。

于 2013-09-22T05:51:36.763 に答える