正規表現が大好き!しかし、「ヘッダ」は、多くの場合、異なるだろう、すべて1行になります正規表現問題、グループにデータを抽出
<Category>DIR</Category><Location>DL123A</Location><Reason>Because</Reason><Qty>42</Qty><Description>Some Desc</Description><IPAddress>127.0.0.1</IPAddress>
すべて:
は、私は次のように、XMLのマングルされた形になります文字列を持っています。
だから私は何をする必要があるか辞書/ Hashtableの
にそれを入れて、上記の文字列からすべての情報を抽出している -
string myString = @"<Category>DIR</Category><Location>DL123A</Location><Reason>Because</Reason><Qty>42</Qty><Description>Some Desc</Description><IPAddress>127.0.0.1</IPAddress>";
//this will extract the name of the label in the header
Regex r = new Regex(@"(?<header><[A-Za-z]+>?)");
//Create a collection of matches
MatchCollection mc = r.Matches(myString);
foreach (Match m in mc)
{
headers.Add(m.Groups["header"].Value);
}
//this will try and get the values.
r = new Regex(@"(?'val'>[A-Za-z0-9\s]*</?)");
mc = r.Matches(myString);
foreach (Match m in mc)
{
string match = m.Groups["val"].Value;
if (string.IsNullOrEmpty(match) || match == "><" || match == "> <")
continue;
else
values.Add(match);
}
- 私はと前作から一緒にそれをハッキング私ができる最も近いところへの正規表現。 しかし、それは本当に私がそれを望むように動作しません。
「ヘッダ」はまた、角度ブラケットを引っ張る。
「値は」空に多くの(ループ内したがってもし危険なステートメント)に引っ張ります。また、ピリオド、カンマ、スペースなどの文字列では機能しません。
2つのステートメントを組み合わせることができたら、正規表現を2回繰り返す必要はありません。
誰でも私にそれを改善できる情報を教えてもらえますか?
Regex r = new Regex(@"<(?<header>[A-Za-z]+)>");
を、これは空のスペースを取り除く必要があります:
私にそれを打つ。可能であれば、ほとんどの場合、正規表現に比べてXMLパーサーを好むべきです。それが彼らのためのものです。 –
ありがとう。私はXMLパーサを使うことは考えていませんでした。なぜならそれはひどく最初から構成されていたからです。それは私に多くの正規表現の頭痛を救った。 –