Jak zamienić wszystkie ciągi na liczby zawarte w każdym ciągu w Notepad ++?

108

Próbuję znaleźć wszystkie wartości z następującym wzorem:

value="4"
value="403"
value="200"
value="201"
value="116"
value="15"

i zastąp ją wartością wewnątrz zakresów.

Aby znaleźć wzorzec, używam następującego wyrażenia regularnego:

.*"\d+"

Jak mogę dokonać wymiany?

Anton Selin
źródło
2
Jaka jest część zamienna? Czy mógłbyś podać przykład?
Toto
^. * value = "([^"] *) ". * $ sprawdź to wyrażenie regularne i zastąp wartość \ 1 tam, gdzie była wymagana
Nikhil KS

Odpowiedzi:

191

W Notepad ++, aby zamienić, naciśnij Ctrl+, Haby otworzyć menu Zamień.

Następnie, jeśli zaznaczysz przycisk „Wyrażenie regularne” i chcesz, aby w zastępstwie wykorzystano część pasującego wzorca, musisz użyć „grup przechwytywania” (więcej informacji w google ). Na przykład, powiedzmy, że chcesz dopasować każdą z poniższych linii

value="4"
value="403"
value="200"
value="201"
value="116"
value="15"

używając .*"\d+"wzoru i chcesz zachować tylko numer. Następnie można użyć grupy przechwytywania w pasującym wzorem, używając nawiasów (i ), tak: .*"(\d+)". Więc teraz w zastępstwie możesz po prostu napisać $1, gdzie $ 1 odnosi się do wartości pierwszej grupy przechwytywania i zwróci liczbę dla każdego udanego dopasowania. Jeśli miał dwie grupy przechwytywania, na przykład (.*)="(\d+)", $1zwróci ciąg valuei $2zwróci numer.

Więc używając:

Odnaleźć: .*"(\d+)"

Zastąpić: $1

To cię zwróci

4
403
200
201
116
15

Należy pamiętać, że istnieje wiele alternatywnych i lepszych sposobów dopasowania wspomnianego wzoru. Na przykład wzór value="([0-9]+)"byłby lepszy, ponieważ jest bardziej szczegółowy i będziesz mieć pewność, że będzie pasował tylko do tych linii. Możliwe jest nawet dokonanie zamiany bez użycia grup przechwytywania, ale jest to nieco bardziej zaawansowany temat, więc na razie go zostawię :)

psxls
źródło
19
Na wymianę $1nie działa dla mnie. Użyłem \1zamiast tego i to zadziałało.
Jason Wheeler
12
\1Działa we wszystkich wersjach Notepad ++. $1działa tylko w nowszych.
Cullub
Domyślam się, że to nie działa z Hex Editorwtyczką. W trybie widoku szesnastkowego Notepad ++ nie wyświetla Regular Expressionopcji Wyszukaj / zamień. W trybie widoku tekstu widzę Regular Expressionopcję Wyszukaj / zamień. Używam Notepad ++ w wersji 6.9.2, która jest obecnie aktualną wersją.
Kevin Fegan
15

psxls dał świetną odpowiedź, ale myślę, że moja wersja Notepad ++ jest nieco inna, więc przechwytywanie $ (znak dolara) nie działa.

Mam Notepad ++ v.5.9.3 i oto jak możesz wykonać swoje zadanie:

Wyszukaj wzorzec: wartość = \ "([0-9] *) \" I zamień na: \ 1 (cokolwiek chcesz zrobić wokół tej grupy przechwytywania)

Dawny. Otocz nawiasami kwadratowymi

[\ 1] -> zwróci wartość = "[4]"

dchayka
źródło
1
\1Pomógł mi zachować numer, ale usunąłem znajdujący się za nim cytat. Miałem około 7400 wierszy w dokumencie takim jak tablename.columnname = '12345'. Pierwszy cytat był łatwy do usunięcia, drugi został utworzony przy użyciu Twojego \1w polu tekstowym zamiany. Dzięki, +1
Ben Fransen
6

Zastąpić (.*")\d+(")

Z $1x$2

Gdzie xjest twoja „wartość wewnątrz zakresów”.

marsze
źródło
0

Mam Notepad ++ v6.8.8

Znajdź : [([a-zA-Z])]

Zastąp : [\ '\ 1 \']

Daje: $ tablica [XYZ] => $ tablica ['XYZ']

Juan Tapiador
źródło
-3

Odnaleźć: value="([\d]+|[\d])"

Zastąpić: \1

To naprawdę cię zwróci

4
403
200
201
116
15

js:

a='value="4"\nvalue="403"\nvalue="200"\nvalue="201"\nvalue="116"\nvalue="15"';
a = a.replace(/value="([\d]+|[\d])"/g, '$1');
console.log(a);
user3178007
źródło
3
Jak to rozwiązanie JavaScript odnosi się do pytania, które zostało otagowane w Notepad ++?
Jason Aller
Jak błędne, zepsute odpowiedzi 1 i 2 mogą odnosić się do pytania, które zostało otagowane za pomocą Notepad ++?
user3178007
Dlaczego tutaj zadałem pytanie? Ponieważ nie mogę tworzyć pytań. Ponieważ nie mam wystarczającej oceny reputacji.
user3178007
1
Nie ma takiego wymogu dotyczącego reputacji, aby zadawać pytania, jak twierdzisz - prawdopodobnie nie można było podlegać ograniczeniom. Spróbuj ponownie: stackoverflow.com/questions/ask
BoltClock
Pytanie zostało zadane. stackoverflow.com/questions/24112018/… Ale ograniczone słowa do wyszukiwania. Ograniczenie jest!
user3178007