» »

regex

regex

l0g1t3ch ::

Mi lahko kdo pomaga sestavit regex, ki bo naredil naslednje
V nizu imam zaporednje vecih znakov X in to zaporednje moram nadomestiti z neko stevilko v ustreznem formatu.

Primer
niz aaaXXXa, stevilka 42 moram spremenit v aaa042a
niz XXXXaa, stevilka 1 moram spremenit v 0001a

X ubistvu drži samo mesto kamor je treba dat številko in število X-ov pove koliko mestna mora bit ta številka.

Thomas ::

To nauš naredu z regex. Pozab.
Man muss immer generalisieren - Carl Jacobi

Jean-Paul ::

V bashu lahko poskusiš s čim takim:

echo "XXXXaa 42" | \
while read str rep;
do
xxx=$(echo $str |grep -o 'X\+');
rep=$(printf "%0${#xxx}d" $rep);
echo "$str" | sed "s/$xxx/$rep/";
done

Zgodovina sprememb…

Jean-Paul ::

Ali še malo drugače:

echo "XXXXaa 42" | \
while read str rep;
do
xxx=$(echo $str |grep -o 'X\+');
rep=$(printf "%0${#xxx}d" $rep);
echo "$str $rep" | sed 's/\([^X]*\)X\+\([^ ]*\) \([0-9]\+\)/\1\3\2/';
done

Thomas ::

To NI regex.
Man muss immer generalisieren - Carl Jacobi

Jean-Paul ::

Ne, to je bash + grep + sed

Thomas ::

Sej. V regex tole ne nardiš.
Man muss immer generalisieren - Carl Jacobi

Jean-Paul ::

Ali bash + sed (brez grepa):
echo "XXXXaa 42" | \
while read str rep;
do
xxx=$(echo $str |sed 's/[^X]*\(X\+\)[^X]*/\1/');
rep=$(printf "%0${#xxx}d" $rep);
echo "$str $rep" | sed 's/\([^X]*\)X\+\([^ ]*\) \([0-9]\+\)/\1\3\2/';
done

Invictus ::

Regex ni namenjen zamenjavi znakov ampak samo iskanju skupin znakov. Zamenjati boš moral potem s čem drugim. Na netu je dovolj primerov uporabe regex-a z vsemi znanimi jeziki.

Da se boš regex-e lažje naučil in jih delal, priporočam Regex Couch.

LP I.

infiniteLoop ::

Ce se kar uporabljas javo, potem lahko uporabis replace metode razreda String.
Primer:
public class Regex {
    public static void main(String[] args) {
        String base = "aaaXXXa";
        String replaced = base.replaceFirst("X+", "42");
        System.out.println(replaced);
    }
}
None of us is as dumb as all of us.

l0g1t3ch ::

Hvala za vse odgovore, sm že rešil pol na preci nelep način. Važno da dela.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Bash osnove

Oddelek: Programiranje
241938 (728) Brane22
»

PHP - stringi

Oddelek: Izdelava spletišč
251643 (1466) pehape
»

Regexp, grep, awk problem?

Oddelek: Programiranje
251612 (1334) Brane2
»

ena kratka bash skriptica

Oddelek: Operacijski sistemi
61047 (838) 'FireSTORM'
»

[ Linux ] Kako zbrisati določene vrstice iz več fajlov hkrati?

Oddelek: Operacijski sistemi
10924 (827) Brane2

Več podobnih tem