ひもで
Test=Hello World #Some more text
Test=Hello World
「Test」グループと「Hello World」グループの両方をキャプチャする必要があります。文字列が「#」で始まる場合、まったくキャプチャされません。
以下の式は、それぞれ 1 番目と 2 番目の文字列に対して機能します。
^((?!#).+)(?:=)(.+[\S])(?:[\s]*[#])
^((?!#).+)(?:=)(.+[\S])
キャプチャしない 2 つの正規表現グループ間でビット単位の論理 OR を実行するにはどうすればよいですか?
私は何かをやってみました
^((?!#).+)(?:=)(.+[\S])(?:[\s]*[#])|(?:.*)
しかし、それを正しく機能させることはできません。
詳細
背景: これは C# (.NET Framework 4.0) で行われています。ファイルは 1 行ずつ読み取られています。等化記号の左側のテキストは変数名を参照し、等化記号の右側のテキストは変数の値を参照します。このファイルは構成ファイルとして使用されています。
一般的なケース:
注: すべての末尾の空白 - 最後の非空白文字の末尾の後の空白はキャプチャされません。これには、2 番目のグループの末尾とポンド記号の間のスペースも含まれます。
1) 空白を除くすべての文字の直後に等化記号が続き、その後に任意の文字セットが続き、その後にスペースとポンド記号が続きます。例えば
this=is valid #text
s0_is=this #text
and=th.is #text
the=characters after the # Pound sign are irrelevant
2) ケース 1 とまったく同じ状況ですが、2 番目のキャプチャ グループとポンド記号の間に末尾のスペースがありません。例えば
this=is valid#text
s0_is=this#text
and=th.is#text
the=characters after the# Pound sign are irrelevant
3) ケース 1 および 2 と同じ状況。ただし、# 記号がまったくない場合 (末尾の空白については上記の注を参照してください)。例えば
this=is valid
s0_is=this
and=th.is
the=characters after the
これら 3 つのケースすべてで、キャプチャ グループはそれぞれ次のようになります (| 記号は、キャプチャ グループを区別するために使用されます)。
this|is valid
s0_is|this
and|th.is
the|characters after the
特殊なケース:
1) 行の最初の文字は # 記号です。これにより、何もキャプチャされません。
2) # 記号は = 記号の直後にあります。これにより、2 番目のキャプチャ グループが null になるはずです。
3) # 記号は、上記で明示的に述べられていない他の場所で使用されます。これにより、何もキャプチャされません。
4) 新しい行の最初の文字の前に空白があってはなりません。ただし、このケースが実際に発生する可能性は低いです。
5) イコライズ記号の直後のスペースは無効です。
無効なケース (何もキャプチャしない場合):
th is=is not valid#text
nor =this#text
or_this=something
also= this