web-dev-qa-db-ja.com

検索/置換の「置換」部分で正規表現を使用しますか?

タブでインデントされた(アウトライン化された)テキストが大量にあり、先頭の箇条書き文字が欠落しています。

        some point
            a sub-point

各タブを2つのスペースに置き換え、前にハイフンを追加します。これは私が必要とするターゲットフォーマットです:

  - some point
    - a sub-point

検索:
正規表現\t+\Sを使用して、「任意の数のタブとそれに続く任意の非空白」を検索できます。これは問題なく機能し、「検索」機能は、最初の非タブ文字までのすべての行の先頭を強調表示します。

置換:
正規表現を使用して、「すべてのタブを2つのスペースに置き換え、次に1つのハイフンと1つのスペース、その後に元の非タブ文字」を指定するにはどうすればよいですか。具体的には:

  1. 「検索結果に一致した回数だけ」発生する置換を指定するにはどうすればよいですか? (したがって、3つのタブは6つのスペースになります。など)
  2. リテラル「1つのハイフン、次に1つのスペース」を指定するにはどうすればよいですか?
  3. 「タブ以外の文字を変更しない」を指定するにはどうすればよいですか?

私のgoogle-fuは私を \1 の概念に導きましたが、それをどのように使用できるかわかりません。私の試行錯誤のテストでは、エラーが発生するだけでした。
更新:
\1について何かを発見しました:find文字列で括弧を使用する必要があります:(\t+)(\S)そしてそれをreplacepart:\1- \2。これは、上記の項目#2と#3を解決するのに役立ちますが、それでも#1については途方に暮れています。
更新:
Duh-#1は、テキストの他の場所にタブ文字がない限り、単純な非正規表現の検索/置換アクションです。それは私が今調査する必要があるものです!

UbuntuのGeditを試していますが、Notepad ++またはSublimeを使用することもできます編集者固有の提案がある場合。

Notepad ++では2つのステップでそれを行うことができます。

最初のステップ:

  • Ctrl+H
  • 何を見つける:\t
  • 置換:(2スペース)
  • ラップアラウンドをチェックしてください
  • 正規表現を確認してください
  • Replace all

2番目のステップ:

  • 何を見つける:^\h+
  • と置換する: $0-
  • ラップアラウンドをチェックしてください
  • 正規表現を確認してください
  • Replace all

説明:

^       : beginning of line
\h+     : 1 or more horizontal spaces

交換:

$0      : the whole match (ie. all the spaces at the beginning of each line)
-       : a dash followed by a space
1
Toto

使用できる方法は2つあります。

文字列全体と次に来るものを検索し、グループ化を使用して、すべてではなく1つ以上のグループに置き換えることができます。ここで、_$1_または_\1_が役立ちます。

交換したい部品だけを検索して、他のものに交換することもできます。

まず、明示的に置換する正規表現を作成して検索します。検索で文字列の複数の部分を検索し、途中に何かを残したい場合は、グループ化が必要です。例:_[b]text[/b]_を検索し、それを_<b>text</b>_に置き換えます

正規表現は\[b\](.+)\]\/b\]のようになり、_<b>\1</b>_に置き換えます。

1つの連続した文字列であるすべてのテキストオカレンスのみを変更する必要がある場合は、それを具体的に検索して置き換えることができます。たとえば、_         -My example_を検索して_ - My example_に置き換えます(これは基本的に2つのスペースのタブを置き換え、-の後にスペースを追加します。_\t+-_を検索して次のように置き換えます。 _ -_

ここでの正規表現とは、1回以上出現するタブを検索し、その後にハイフンを続けることを意味します。実際に置換せずにこの文字列を検索すると、置換するテキストが選択されていることがわかります。

タブを2つのスペースに置き換える場合は、単に_\t_を検索し、それを__に置き換えます。

この投稿では、スペースの後にalt + 255を使用して、2つのスペースを続けて入力しました。そうしないと、SuperUserはすべてを1つのスペースに凝縮します。

1
LPChip