2

"Hello <strong>plip</strong> plop" を取得するため に:のような文字列をフィルタリングする こと"plip plop"、つまり、「plip」と「plop」を除くすべての単語を除外することは、このC#行で簡単になります new Regex("[^(plip)(plop)]").Replace(inputString,"")。残念ながら、除外括弧[^]は「plip」と「plop」に含まれる各文字を保持するため、除外単語を受け入れないようです(結果は"llooplipoplop")。

単一の正規表現/行でこれを実現する方法はありますか、それともplipとplopの他のすべての一致をループしてから、それらを連結する必要がありますか?

4

2 に答える 2

3

これがうまくいくことを願っています

(?<=(\bplip\b|\bplop\b|^)).*?(?=(\bplip\b|\bplop\b|$))

singleline上記の正規表現が機能するようにモードを設定する必要があります

ここで動作します

于 2012-10-10T13:34:52.613 に答える
3

一般的に言えば、不要なものすべてに一致する正規表現を作成するよりも、必要なものに一致する正規表現を作成する方がはるかに簡単です。

plipこの場合、「 and以外のすべての単語を除外したい」のに、代わりにandplopだけを含めないのはなぜでしょうか?plipplop

var input = "Hello <strong>plip</strong> plop";
var matches = Regex.Matches(input, "plip|plop");
var result = string.Join("", matches.Cast<Match>().Select(x => x.Value));

Console.Out.WriteLine(result); // prints "plipplop"

もちろん、ワンライナーを要求したので、一時変数なしですべてを行うことができます (そして、コードを読んでいる次の人に幸運を!):

var result = string.Join("", Regex.Matches("Hello <strong>plip</strong> plop", "plip|plop").Cast<Match>().Select(x => x.Value));

plipまた、実際の単語リストがandよりも複雑であると仮定すると、パターンを構築するplopようなことを行うことができます。var pattern = string.Join("|", words);

于 2012-10-10T13:36:48.853 に答える