2013-12-10 17 views
5

Come posso sommare o aggiungere un determinato valore a tutti quei numeri? Ad esempio il mio obiettivo è aumentare tutti i numeri all'interno del "" con 100 ma il raggiungimento di questo è stato problematico. Fondamentalmente in qualche modo sommare il numero corrente con +100.Notepad ++ Espressione regolare numeri di sommario

ho le seguenti linee

<devio1="875" devio2="7779" devio3="5635" devio4="154"/> 
<devio1="765" devio2="74779" devio3="31535" devio4="544"/> 
<devio1="4335" devio2="13" devio3="55635" devio4="1565"/> 

Utilizzando questa espressione regolare con Notepad ++

<devio1="([0-9]+)" devio2="([0-9]+)" devio3="([0-9]+)" devio4="([0-9]+)"/> 

posso trovare tutti i numeri all'interno del "", ma non riesco a trovare un modo per aggiungere +100 a tutti loro. Questo compito può essere raggiunto con Notepad ++ usando le espressioni regolari?

+1

Non proprio una risposta alla tua domanda, solo al tuo problema: potresti prendere in considerazione l'idea di usare Perl. – Peter

+2

Le espressioni regolari sono per la manipolazione delle stringhe, in realtà non sono adatte per fare matematica. –

+0

Non è possibile ottenere ciò usando solo espressioni regolari, avrete bisogno di una richiamata. Puoi scrivere il tuo plugin per Notepad ++ o semplicemente usare la tua lingua preferita. – HamZa

risposta

0

Regex non supporta aritmetico e Notepad ++ non supporta alcun calcolo oltre la regex, quindi sei bloccato se ti stai limitando a quello strumento. Ci sono, naturalmente, molte altre soluzioni non-Notepad ++, alcune delle quali sono discusse in Math operations in regex.

3

Non ho familiarità con Notepad ++ ma per un algoritmo, supponendo di avere un numero abcd = a * 1000 + b * 100 + c * 10 + d, quindi finché b è in [0,8] puoi semplicemente sostituire b con b + 1. Per quanto riguarda b = 9, allora devi sostituire b con 0 e sostituire a con + 1 (e se a = 9 allora sostituirai a per 10).

Notando questo, si potrebbe quindi, per tre e quattro numeri a due cifre, per esempio, si applicano le seguenti regex:

\([1-9]+\)0\([0-9]{2}\) -> \1 1\2, 
\([1-9]+\)1\([0,9]{2}\) -> \1 2\2, 
... -> , 
\([1-9]+\)8\([0-9]{2}\) -> \1 9\2, 

e così via ... Notando che si deve anche prendere in considerazione qualsiasi a = 9, b = 9 numeri interi e numeri interi più grandi; questo suggerisce una sorta di iterazione con le istruzioni if ​​che coprono i casi in cui i coefficienti di 10^x (x> = 2) sono uguali a 9. Quando inizi a codificarlo (o farlo a mano) inizierai a capire che facendo questo con un approccio regex puro sarà doloroso.

8

Questo non è possibile con il solo uso di espressioni regolari in Notepad ++. Sfortunatamente non c'è modo di eseguire calcoli nel modello di sostituzione.

Quindi, l'unico modo per eseguire l'attività in Notepad ++ è l'utilizzo del plug-in Python Script.

  1. Installare Python Script plugin dal Plugin Manager o dal official website.
  2. Quindi andare a Plugins>Python Script>New Script. Scegliere un nome per il nuovo file (ad esempio add_numbers.py) e copiare il codice che segue:

    def calculate(match): 
        return 'devio%s="%s"' % (match.group(1), str(int(match.group(2))+100)) 
    
    editor.rereplace('devio([0-9])="([0-9]+)"', calculate) 
    
  3. Run Plugins>Python Script>Scripts>add_numbers.py e il testo sarà trasformato a:

    <devio1="975" devio2="7879" devio3="5735" devio4="254"/> 
    <devio1="865" devio2="74879" devio3="31635" devio4="644"/> 
    <devio1="4435" devio2="113" devio3="55735" devio4="1665"/> 
    
+0

Grazie amico. Tu sei il vero MVP! ^^ – Korbi

Problemi correlati