Mam dużą ilość tekstu z wcięciem (konturem), w którym brakuje wiodącego znaku wypunktowania:
some point
a sub-point
Chcę zastąpić każdą kartę 2 spacjami i dodać myślnik z przodu. Potrzebuję formatu docelowego:
- some point
- a sub-point
Znajdź:
mogę użyć wyrażenia regularnego, \t+\S
aby znaleźć „dowolną liczbę zakładek, a następnie dowolne spacje”. Działa to dobrze, a funkcja „znajdź” podkreśla początek każdej linii, aż do pierwszego znaku niezawierającego tabulatorów.
Zastąp:
Jak mogę użyć wyrażenia regularnego, aby określić „zamień każdą tabulator na 2 spacje, a następnie jeden myślnik i jedną spację, a następnie oryginalny znak inny niż tabulator”? Konkretnie:
- Jak określić zamianę, która ma się odbyć „tyle razy, ile było wyników w znalezieniu”? (Tak więc trzy tabulatory zamieniają się w sześć spacji itp.)
- Jak określić dosłowne „jeden łącznik, a następnie jedną spację”?
- Jak określić „nie zmieniaj znaku, który nie jest tabulatorem”?
Moje google-fu doprowadziło mnie do koncepcji,\1
ale nie wiem, jak mogę to wykorzystać. Moje testy prób i błędów spowodowały jedynie błędy.
Aktualizacja:
Odkryłem coś o \1
: Muszę użyć nawiasów w moim find ciąg: (\t+)(\S)
a następnie użyć jej w zastąpienia części: \1- \2
. Pomaga mi to rozwiązać powyższe punkty 2 i 3, ale wciąż brakuje mi około 1!
Aktualizacja:
Duh - nr 1 może być prostą operacją znajdowania / zastępowania wyrażeń regularnych, o ile w tekście nie ma żadnych znaków tabulacji. Muszę to teraz zbadać!
Próbuję z Gedit Ubuntu, ale mogę również użyć Notepad ++ lub Sublime, jeśli masz sugestie dotyczące konkretnego edytora.
źródło
Odpowiedzi:
Możesz to zrobić za pomocą Notepad ++ w dwóch krokach:
Pierwszy krok:
\t
(2 spacje)
Drugi krok:
^\h+
$0-
Wyjaśnienie:
Zastąpienie:
źródło
Istnieją dwie metody, których możesz użyć.
Możesz wyszukać cały ciąg + co będzie dalej i użyć grupowania, aby zastąpić go jedną lub więcej grupami, ale nie wszystkimi. To jest miejsce
$1
lub\1
gra.Możesz także wyszukać tylko tę część, którą chcesz zastąpić, i po prostu zastąp ją inną.
Najpierw zbuduj wyrażenie regularne, które chcesz jawnie zastąpić i wyszukaj. Jeśli wyszukiwanie wyszukuje wiele części ciągu i chcesz zachować coś pośrodku, konieczne jest grupowanie. Przykład: wyszukaj
[b]text[/b]
i zamień na<b>text</b>
Wyrażenie regularne byłoby czymś podobnym
\[b\](.+)\]\/b\]
i zastąpiłoby go<b>\1</b>
Jeśli musisz zmienić tylko każde wystąpienie tekstu, które jest jednym ciągiem ciągłym, możesz wyszukać je specjalnie i zastąpić. Na przykład szukając go
-My example
i zamieniając na- My example
(który w zasadzie zastępuje tabulatory dla dwóch spacji i dodaje spację po - , szukałbyś go\t+-
i zamieniał na-
Wyrażenie regularne oznacza tutaj: wyszukaj dowolną kartę, która występuje 1 lub więcej razy, po której następuje myślnik. Jeśli wyszukasz ten ciąg bez faktycznej zamiany, zobaczysz, że wybierze tekst, który chcesz zastąpić.
Jeśli chcesz zastąpić dowolną kartę dwiema spacjami, po prostu wyszukaj ją
\t
i zamień naZauważ, że użyłem spacji, a następnie alt + 255 wszędzie w tym poście, aby wpisać 2 spacje z rzędu, w przeciwnym razie SuperUser skondensuje wszystko do 1 spacji.
źródło
\1
. W moim przypadku każda linia zaczyna się od dowolnych słów, więc nie mogę podążać za twoimMy example
pomysłem.