10

各ピリオドと文字の間にスペースを挿入して文を区切りたいのですが、ドットと角かっこ、ドットとコンマなどの間にスペースを挿入したくありません。

このことを考慮:

This is a text.With some dots.Between words.(how lovely).

これはおそらくPerlまたはPHPでいくつかの解決策がありますが、私が興味を持っているのは、正規表現に基づく検索/置換をサポートするテキストエディターで実行できるかどうかです。問題は、ドットと文字の両方に一致し、置換すると両方が完全に消去されることです。言い換えれば、これらの2つのキャラクターの間で「何もない」ことを一致させる方法はありますか?

4

4 に答える 4

16

置換文字列で逆参照を使用できます。通常、次のようになります。

正規表現を検索:

(\.)(\w)

交換パターン(スペースに注意):

$1 $2

後方参照は、対応するグループの代役です。

または、ルックアラウンドを使用することもできます。

(?<=\.)(?=\w)

これはテキストを「キャプチャ」するのではなく、ピリオドと文字/数字(長さゼロの文字列)の間の位置にのみ一致します。それを置き換えると、基本的に、いくつかのテキストが挿入されます。

ただし、実際には、テキストエディタの機能によって異なります。「完全な」正規表現エンジンが組み込まれているテキストエディタはほとんどありません。私は、ルックアラウンドをほとんどサポートしない独自の正規表現のフレーバーを持つTextPadを使用しています(最初のアプローチを使用する必要があります)。

于 2012-10-29T15:52:51.660 に答える
2

言語は示されておらず、私はPHPを使用しましたが、式は非常に一般的であり、他の環境で再利用できます。

<?php

$s = 'This is a text.With some dots.Between words.(how lovely).';
$r = '~(\w)(\.)(\w)~';

echo preg_replace($r, '$1 $3', $s);

このコードは、次の文字列出力になります。

This is a text With some dots Between words.(how lovely).
  1. (\ w)ドットの前の1文字の英数字に一致します
  2. (。)ドットに一致
  3. (\ w)ドットの後の1文字の英数字に一致します

1番目と3番目の一致は、置換文字列で$1と$3として参照されます

于 2012-10-29T15:40:38.613 に答える
1

Perlの場合:

$msg =~ s/\.([a-zA-Z])/\. \1/g

vim(ファイル全体):

:%s/\.([a-zA-Z])/\. \1/g

Visual Studioでは、

\.([a-zA-Z])

「Findwhat:」で、および

\. \1

「置換:」で。

一般に、regexによる検索をサポートするほとんどのエディターには、一致した式の一部を格納して置換テキストで使用できるキャプチャグループがあります。上記の式では、のすべて()が「キャプチャ」されており、これをに含めてい\1ます。

于 2012-10-29T15:44:09.253 に答える
1

コードのこのセグメントは、問題を解決します。

preg_replace('/([a-zA-Z]{1})\.([a-zA-Z]{1})/', '$1. $2', 'This is a text.With some dots.Between words.(how lovely).');

ドットの前後の文字を検出し、ブランコに置き換える必要があります。

于 2012-10-29T15:48:02.647 に答える