Forum » Programiranje » 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.
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.
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
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…
- spremenil: Jean-Paul ()
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
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
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
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.
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:
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.
Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | Bash osnoveOddelek: Programiranje | 2150 (940) | Brane22 |
| » | PHP - stringiOddelek: Izdelava spletišč | 1976 (1799) | pehape |
| » | Regexp, grep, awk problem?Oddelek: Programiranje | 1832 (1554) | Brane2 |
| » | ena kratka bash skripticaOddelek: Operacijski sistemi | 1192 (983) | 'FireSTORM' |
| » | [ Linux ] Kako zbrisati določene vrstice iz več fajlov hkrati?Oddelek: Operacijski sistemi | 1073 (976) | Brane2 |