0

私は自分のプロジェクトで立ち往生していて、この困難を乗り越えることができません。私はこの問題の解決策を私に与えるために他の人からの助けが欲しいです:

私は文字列を持っていて、その文字列の中にいくつかのトークンテキストがあり、それらを手動で取り出して文字列の配列リストに入れたいと思っています。最終結果には、2つの配列リストが含まれる可能性があります。1つは通常のテキストで、もう1つはトークンテキストです。以下は、オープンタグ「[[」とクローズタグ「]]」で囲まれたトークンを含む文字列のサンプルです。


でんぷん源を熱湯と混合して麦汁を調製する最初のステップは、[[Textarea]]として知られています。お湯は、マッシュタンで砕いた麦芽または麦芽と混合されます。マッシングプロセスは[[CheckBox]]を取り、その間にでんぷんが砂糖に変換され、次に甘い麦汁が穀物から排出されます。穀物は[[ラジオ]]として知られるプロセスで洗浄されます。この洗浄により、醸造者は穀物から発酵性液体を可能な限り集めることができます[[DropDownList]]。


文字列を操作した後に取得される2つの配列リストがあります。

結果:

Normal Text ArrayList { "The first step, where the wort is prepared by mixing the starch source with hot water, is known as ", ". Hot water is mixed with crushed malt or malts in a mash tun. The mashing process takes around ", ", during which the starches are converted to sugars, and then the sweet wort is drained off the grains. The grains are now washed in a process known as ", ". This washing allows the brewer to gather ", " the fermentable liquid from the grains as possible." }

Token Text ArrayList { "[[Textarea]]", "[[CheckBox]]", "[[Radio]]", "[[DropDownList]]" }

2つの配列リスト。1つは通常のテキスト配列リストで、トークンの前後のテキストである5つの要素があり、もう1つはトークンテキスト配列リストで、文字列内のトークンテキストである4つの要素です。

この作業は、カットとサブストリングのどの手法でも実行できますが、長いテキストには難しすぎて、エラーが発生しやすく、必要なものが得られない場合があります。この問題でヘルプが必要な場合は、C#を使用してこのタスクを実行しているため、C#で投稿してください。

4

1 に答える 1

1

これは仕事をしているようです(ただし、現時点では、配列にはandtokensでラップされているのではなく、プレーントークンが含まれていることに注意してください:[[]]

var inp = @"The first step, where the wort is prepared by mixing the starch source with hot water, is known as [[Textarea]]. Hot water is mixed with crushed malt or malts in a mash tun. The mashing process takes around [[CheckBox]], during which the starches are converted to sugars, and then the sweet wort is drained off the grains. The grains are now washed in a process known as [[Radio]]. This washing allows the brewer to gather [[DropDownList]] the fermentable liquid from the grains as possible.";

var step1 = inp.Split(new string[] { "[[" }, StringSplitOptions.None);
//step1 should now contain one string that's due to go into normal, followed by n strings which need to be further split
var step2 = step1.Skip(1).Select(a => a.Split(new string[] { "]]" }, StringSplitOptions.None));
//step2 should now contain pairs of strings - the first of which are the tokens, the second of which are normal strings.

var normal = step1.Take(1).Concat(step2.Select(a => a[1])).ToArray();
var tokens = step2.Select(a => a[0]).ToArray();

[[これはまた、入力に不均衡なおよび]]シーケンスがないことを前提としています。

この解決策の考察:[[元のテキストの各ペアで最初に文字列を分割する場合、最初の出力文字列は既に生成されています。さらに、最初の文字列以降のすべての文字列は、トークン、]]ペア、および通常のテキストで構成されます。たとえば、2 番目の結果step1は「Textarea]] です。熱湯は、マッシュ タンで粉砕された麦芽または麦芽と混合されます。マッシング プロセスには約 "

したがって、これらの他の結果を]]ペアで分割すると、最初の結果はトークンになり、2 番目の結果は通常の文字列になります。

于 2013-02-28T07:27:34.440 に答える