0

C#で正規表現を使用して次のパターンをキャプチャし、「マージ済み」という単語に置き換えたい

文字には、少なくとも4つのスペースまたは1つのタブが必要です。しかし、それらは混合することができます

space space space -無効-'マージされていません'

space space space space -有効-'マージ済み'

space space space space space-有効-'マージ済み'

space <tab> -有効-'マージ済み'

<tab><tab>-有効-'マージ済み'

space<tab><tab>space-有効-'マージ済み'

4

3 に答える 3

3

以下が機能するはずです。

[ ]*\t[ \t]*|[ ]{4,}

何が起こっているのかを明確にするためにスペースを表し[ ]ましたが、角括弧を削除しても同様に機能します.

説明:

  [ ]*      # any number of spaces
  \t        # a single tab
  [ \t]*    # any number of spaces or tabs
|         # OR
  [ ]{4,}   # 4 or more spaces

例: http://www.rubular.com/r/MJYp80iEN1

これは、先読みを使用して条件をチェックし、任意の数のスペースまたはタブに一致する代替手段です。

(?=[ ]*\t|[ ]{4})[ \t]+
于 2012-08-28T18:51:39.350 に答える
1

{4,}| *\t[ \t]*

{4,}4 つ以上のスペース
|の交互配置を示します --上記のオプションとゼロ以下のすべてのスペース (下のタブの前) のOR間の演算子のように、 1 つのタブ タブの後ろ (上のタブの後) のゼロ以上のタブまたはスペース
*
\t
[ \t]*

これらは、それぞれの後の単一のスペースです[

これにより、少なくとも 1 つのタブがあれば、スペースとタブを任意に組み合わせることができます。これが質問の読み方です。タブのシナリオに追加の制約がある場合は、コメントしてください。回答を更新します。

var result = Regex.Replace(input, @" {4,}|[ \t]*\t[ \t]*", "Merged");
于 2012-08-28T18:51:57.470 に答える
0

私はこの正規表現を試します:

[ \t]*( {4}|*\t)[ \t]*

コア条件 (少なくとも 4 つのスペースまたはタブ) をチェックし、任意の数の周囲のタブまたはスペースと一致します (すべてのタブ/スペースの空白を置き換えることができます)。

于 2012-08-28T18:52:33.237 に答える