1

= などを並べるために多くの空白が追加されている古い「フォーマットされた」コードに苦労しています。

  if (!This.RevData.Last().Size() eq 0) then
    !DocRev   = '?'
    !Status   = '?'
    !RevCode  = '?'
  else
    !Pad      = !This.RevData.Last()[1]
    !DocRev   = !Pad[2]
    !Status   = !This.GenUtil.If((!Pad[3] eq 'UA'), '' , !Pad[3])
    !RevCode  = !This.GenUtil.If((!Pad[6] eq ''  ), '?', !Pad[6])
  endif

この例では、実際にはある程度の意味がありますが、ほとんどの場合、コードが変更されて、空白が役立つというよりも混乱を招く状態になっています。

私がやりたいことは、すべての二重(またはそれ以上)の空白を単一のスペースに置き換えることですが、もちろんインデントを維持したいと思います。したがって、行頭にない二重(またはそれ以上)のスペースを識別するための正規表現を探しています。私は否定的な後読みを試しましたが、うまくいかないようです:

(?<![\n])[\s]{2,}

ヒントはありますか?ああ、私は Ultraedit (Perl 正規表現エンジン) を使用しているので、正規表現は「UE 互換」である必要があります。

EDIT : UE は行ごとに正規表現の行を評価しません。改行は、ドキュメントである長い文字列の単なる文字であり、問​​題を少し複雑にします。

4

3 に答える 3

3

([^ \n]) +" " を " " に置き換え$1ます。ファンキーな後読みは必要ありません。

(強調するために、マークアップでは明確に示されていませんが、プラス記号の前に 2 つのスペースがあり、1 つのスペースが 1 つのスペースに不必要に置き換えられるのを防ぎます。)

于 2012-08-08T08:08:46.480 に答える
2

これは PCRE ではありませんが、Linux シェルにアクセスできる場合に必要なことは次のとおりです。

sed s/"([^ ]) +"/"\1 "/g source.code > reformatted.code

その文字を保持しながら、スペース以外の文字に続くスペースを置き換えるだけです。Perl 正規表現に慣れていれば、簡単に perlify できるはずです。

于 2012-08-08T08:09:23.233 に答える
1

交換してみてください...

(?<=[^\r\n])([\t ])[\t ]*

と...

$1
于 2012-08-08T08:09:59.113 に答える