Come sostituire tutte le stringhe con i numeri contenuti in ciascuna stringa in Notepad ++?


108

Sto cercando di trovare tutti i valori con il seguente schema:

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

e sostituirlo con valore all'interno degli ambiti.

Sto usando la seguente regex per trovare il pattern:

.*"\d+"

Come posso fare una sostituzione?


2
Qual è la parte di ricambio? Puoi fare un esempio?
Toto

^. * value = "([^"] *) ". * $ controlla questa regex e ripeti il ​​valore \ 1 dove il valore richiesto
Nikhil KS

Risposte:


191

In Notepad ++ per sostituire, premi Ctrl+ Hper aprire il menu Sostituisci.

Quindi, se selezioni il pulsante "Espressione regolare" e desideri che la tua sostituzione utilizzi una parte del modello di corrispondenza, devi utilizzare "cattura gruppi" (leggi di più su google ). Ad esempio, supponiamo che desideri abbinare ciascuna delle seguenti righe

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

utilizzando lo .*"\d+"schema e si desidera mantenere solo il numero. È quindi possibile utilizzare un gruppo di cattura nel pattern matching, usando parentesi (e ), così: .*"(\d+)". Quindi ora nella tua sostituzione puoi semplicemente scrivere $1, dove $ 1 fa riferimento al valore del primo gruppo di acquisizione e restituirà il numero per ogni corrispondenza riuscita. Se avessi due gruppi di acquisizione, ad esempio (.*)="(\d+)", $1restituirà la stringa valuee $2restituirà il numero.

Quindi utilizzando:

Trova: .*"(\d+)"

Sostituire: $1

Ti restituirà

4
403
200
201
116
15

Si prega di notare che ci sono molti modi alternativi e migliori per abbinare il modello di cui sopra. Ad esempio il pattern value="([0-9]+)"sarebbe migliore, poiché è più specifico e sarai sicuro che corrisponderà solo a queste linee. È anche possibile effettuare la sostituzione senza l'uso di gruppi di acquisizione, ma questo è un argomento leggermente più avanzato, quindi per ora lo lascio :)


19
Per la sostituzione, $1non ha funzionato per me. L'ho usato \1invece e ha funzionato.
Jason Wheeler

12
\1Funziona in tutte le versioni di Notepad ++. $1funziona solo in quelli più recenti.
Cullub

Immagino che questo non funzioni con il Hex Editorplugin. Nella modalità di visualizzazione esadecimale Notepad ++ non mostra l' Regular Expressionopzione per Cerca / Sostituisci. Nella modalità di visualizzazione del testo vedo l' Regular Expressionopzione per Cerca / Sostituisci. Sto usando Notepad ++ versione 6.9.2, che è la versione corrente in questo momento.
Kevin Fegan

15

psxls ha dato un'ottima risposta ma penso che la mia versione di Notepad ++ sia leggermente diversa, quindi l'acquisizione di $ (segno di dollaro) non ha funzionato.

Ho Notepad ++ v.5.9.3 ed ecco come puoi svolgere il tuo compito:

Cerca il modello: value = \ "([0-9] *) \" e sostituiscilo con: \ 1 (qualunque cosa tu voglia fare intorno a quel gruppo di acquisizione)

Ex. Circonda con parentesi quadre

[\ 1] -> produrrà valore = "[4]"


1
\1Mi ha aiutato a mantenere il numero ma a rimuovere la citazione dietro di esso. Avevo circa 7400 righe in un documento simile tablename.columnname = '12345'. La prima citazione è stata facile da rimuovere, la seconda è stata eseguita utilizzando il tuo \1nella casella di testo di sostituzione. Grazie, +1
Ben Fransen

6

Sostituire (.*")\d+(")

Con $1x$2

Dov'è il xtuo "valore all'interno degli ambiti".


0

Ho Notepad ++ v6.8.8

Trova : [([a-zA-Z])]

Sostituisci : [\ '\ 1 \']

Produrrà: $ array [XYZ] => $ array ['XYZ']


-3

Trova: value="([\d]+|[\d])"

Sostituire: \1

Ti restituirà davvero

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);

3
In che modo questa soluzione JavaScript è correlata alla domanda contrassegnata con Notepad ++?
Jason Aller

In che modo le risposte 1 e 2 difettose e non corrette possono essere correlate alla domanda contrassegnata con Notepad ++?
user3178007

Perché ho posto la domanda qui? Perché non posso creare domande. Perché non ho abbastanza punteggio di reputazione.
user3178007

1
Non esiste un requisito di reputazione per porre domande come affermi: non potresti essere stato limitato. Riprovare: stackoverflow.com/questions/ask
BoltClock

La domanda è stata posta. stackoverflow.com/questions/24112018/… Ma limitato nelle parole da cercare. La limitazione è!
user3178007
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.