は、これらのすべてが含まれている含まれていないパターン1で始まる:C#の正規表現は、次の入力文字列のパターン2
- a1.aaa [加入]
- a1.bbb
- B1 a1.ccc .ddd
- d1.ddd [加入]私は出力を取得したい
:
- BBB
- CCC意味
: "A1。" の後に来るすべての単語サブ文字列「[SUBSCRIBED]」は含まれません
は、これらのすべてが含まれている含まれていないパターン1で始まる:C#の正規表現は、次の入力文字列のパターン2
:
: "A1。" の後に来るすべての単語サブ文字列「[SUBSCRIBED]」は含まれません
「a1」の後ろにすべての単語が続きます。サブ文字列は含まれていません "[SUBSCRIBED]"
なぜ正規表現ですか?以下はクリスタルクリアです。
var result = strings
.Where(s => s.StartsWith("a1.") && !s.Contains("[SUBSCRIBED]"))
.Select(s => s.Substring(3));
regexはより効率的になります。さらに、「a1」の長さは何か分かりません。 (それは変数になります) – bensagi1989
@ bensagi1989:regexは効率的ではなく、変数や '' a1。 ''を使うと問題はありません。 's1StartsWith(variable)'と 's.Substring(variable.Length) 'を使用してください。 –
ティムズの答えです。しかし、あなたがそれを主張するならば、私は正規表現がこのように見えることを念願します。 ^a1
意味を持つ
^a1\.(.*)(?<!\[SUBSCRIBED\])$
は
OPは' a1'は可変長であり、 'b1.ddd' - >' ddd'では、OPが 'a1'変数の処理方法を示すMCVEを追加しない限り、正規表現は機能しません。 – Mat
申し訳ありません。 – bensagi1989
正規表現文字列を作成するときに、 'a1'の代わりに使用する変数を挿入する必要があると思います。別の言い方をすれば、私はMCVE @Matという言葉に慣れていません。( "<! - \ [SUBSCRIBED \])$"; –
は、あなたが使用することができます[加入]で終わるテキストを拒否する文字
の任意の数と負の後読み(?<!\[SUBSCRIBED\])$
を取っA1
\.(.*)
で始まる
^a1\.(?!.*\[SUBSCRIBED])(.*)
regex demoを参照してください。
詳細
^
- 文字列a1\.
の開始 - 文字通りa1.
サブ(?!.*\[SUBSCRIBED])
から[SUBSCRIBED]
ストリングがある場合は、一致に失敗否定先読みは、任意の0の後に存在し、 +文字(RegexOptions.Singleline
オプションを使用しない場合の改行以外)(.*)
- グループ1:末尾までの行(RegexOptions.Singleline
オプションを使用する場合、.
も改行に一致します)。C#コード:
var result = string.Empty;
var m = Regex.Match(s, @"^a1\.(?!.*\[SUBSCRIBED])(.*)");
if (m.Success)
{
result = m.Groups[1].Value;
}
私は前にこの質問を見たと確信している...あなたは何を試してみましたか? –
[mcve] –
ようこそStackOverflowへようこそ、ツアーを見直してみてください。https://stackoverflow.com/tour 最小限で完全で検証可能な例を作成する方法:https:// stackoverflow。 com/help/mcveより具体的には、 *良い質問をする方法* https://stackoverflow.com/help/how-to-ask - あなたはいくつかの考えを入れれば、より良いフィードバックと役に立つ回答を得るでしょう問題を解決するために努力している*あなたが試したコード*に特定の問題を含めることによって、あなたの問題を解決することができます。特定の問題のアイデアが出たら、投稿を編集できます。 – mjw