3

スペース、キャリッジ リターン、ライン フィード (制御文字) などの任意の文字を含むソース文字列があります。制御文字は、単語の途中など、どこにでも出現する可能性があります。

ソース文字列と同じ文字を選択できる検索文字列がありますが、通常はソース文字列の部分文字列になります。この検索文字列の制御文字の順序と数は、ソースとは異なる場合があります。

検索文字列内の非制御文字が一致する場合、文字列内の制御文字を含むその文字列をソース文字列から削除する必要があります。ソース文字列の他の場所にある制御文字は削除しないでください。

私の計画は\s*、検索文字列のすべての文字の後に追加することでした。これは問題ありませんが、検索文字列内の Regex 特殊文字をエスケープする必要があります。そうしないと、正規表現コマンドとして扱われ、実際のプレーン テキストではなくなります。

\s*各文字 ( ) の後に追加できます'mytext.scan(/./).join("\\s*")'が、挿入した正規表現コードではなく特殊文字をエスケープするにはどうすればよいですか? \s*逆にすると、正規表現の特殊文字をエスケープできますが、各文字の後に単純に追加することはできません。エスケープ文字を避ける必要があります。

わかりやすくするために、制御文字 = スペースまたは \t または \r または \n または \f

編集:私の要件を明確にするために3番目の段落を変更しました

4

2 に答える 2

0

素朴なアプローチは

1) 検索文字列を個々の文字 (それぞれが文字列) のリストに分割する

2) 個々の文字をサニタイズします (まだ文字列のリストです)

\s*3) *でリストに参加

*ところで、例外\s*は機能しません - \s*0 個以上の空白に一致しますが、これは 0 個以上の制御文字とは異なります。http://www.regular-expressions.info/posixbrackets.html#classを参照して、正規表現フレーバーで機能する「制御文字」の形式を使用してください:)

\W*\Wa-zA-Z0-9_ にない任意の文字であるため、これも機能する可能性があります。しかし、それが制御文字と一致するのか、印刷可能な文字のみと一致するのかをテストしたことはありません。

于 2013-03-20T00:05:01.110 に答える