Discussione:
regex (posix) matchare stringa con almeno 10 lettere maiuscole
(troppo vecchio per rispondere)
BIG Umberto
2021-08-08 21:24:18 UTC
Permalink
Data una serie di stringhe, con frasi, parole varie, numeri, virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10 lettere maiuscole
messe in qualsiasi ordine.

Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
--
I can't use Windows. My cat ate my mouse.
Yoda
2021-08-08 21:45:33 UTC
Permalink
Post by BIG Umberto
Data una serie di stringhe, con frasi, parole varie, numeri,
virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10
lettere maiuscole
messe in qualsiasi ordine.
Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
Certamente c'e' qualcosa che mi sfugge, puoi precisare? perche' la
seguente riga di comando me li da' al volo; ma e' troppo semplice
ed elementare, dov'e' l'inghippo?

grep "[[:upper]].*[[:upper]].*[[:upper]].*[[:upper]].*[[:upper]].*\
[[:upper]].*[[:upper]].*[[:upper]].*[[:upper]].*[[:upper]].*" ORIGINE

(se cerchi solo ascii non esteso cambi con [A-Z])
--
Yoda
Yoda
2021-08-08 21:50:14 UTC
Permalink
Post by Yoda
Post by BIG Umberto
Data una serie di stringhe, con frasi, parole varie, numeri,
virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10
lettere maiuscole
messe in qualsiasi ordine.
Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
Certamente c'e' qualcosa che mi sfugge, puoi precisare? perche' la
seguente riga di comando me li da' al volo; ma e' troppo semplice
ed elementare, dov'e' l'inghippo?
grep "[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*\
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*" ORIGINE
Mancavano i due punti, ma tanto era ovvio (l'ho riscritto per completezza).
Post by Yoda
(se cerchi solo ascii non esteso cambi con [A-Z])
--
Yoda
Yoda
2021-08-08 22:38:29 UTC
Permalink
Post by Yoda
Post by Yoda
Post by BIG Umberto
Data una serie di stringhe, con frasi, parole varie, numeri,
virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10
lettere maiuscole
messe in qualsiasi ordine.
Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
Certamente c'e' qualcosa che mi sfugge, puoi precisare? perche' la
seguente riga di comando me li da' al volo; ma e' troppo semplice
ed elementare, dov'e' l'inghippo?
grep "[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*\
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*" ORIGINE
Di nuovo ERRATA-CORRIGE, manca il ".*" iniziale.
Post by Yoda
Post by Yoda
grep ".*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*\
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*" ORIGINE
Mancavano i due punti, ma tanto era ovvio (l'ho riscritto per completezza).
Post by Yoda
(se cerchi solo ascii non esteso cambi con [A-Z])
--
Yoda
Yoda
2021-08-08 22:44:40 UTC
Permalink
Post by Yoda
Post by Yoda
Post by BIG Umberto
Data una serie di stringhe, con frasi, parole varie, numeri, virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10 lettere maiuscole
messe in qualsiasi ordine.
Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
Certamente c'e' qualcosa che mi sfugge, puoi precisare? perche' la
seguente riga di comando me li da' al volo; ma e' troppo semplice
ed elementare, dov'e' l'inghippo?
grep "[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*\
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*" ORIGINE
Di nuovo ERRATA-CORRIGE, manca il ".*" iniziale.
Post by Yoda
grep ".*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*\
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*" ORIGINE
Continuo a sbagliare: non serve il ".*" iniziale e neppure il finale.

(scusatemi per tutti questi post, devo stare piu' attento ciao a tutti)
--
Yoda
enoquick
2021-08-09 00:31:27 UTC
Permalink
Post by BIG Umberto
Data una serie di stringhe, con frasi, parole varie, numeri, virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10 lettere maiuscole
messe in qualsiasi ordine.
Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
echo '<line>' | perl -ne '/\p{uppercase}{10,}/ && print $_ '
--
|___|
Yoda
2021-08-09 01:45:56 UTC
Permalink
Post by enoquick
Post by BIG Umberto
Data una serie di stringhe, con frasi, parole varie, numeri,
virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10
lettere maiuscole
messe in qualsiasi ordine.
Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
echo '<line>' | perl -ne '/\p{uppercase}{10,}/ && print $_ '
Da me questo con perl prende solo 10 consecutive, pero' l'ho provato
dando "cat file_input" al posto di "echo '<line>'" che non capisco ciao

Comunque e' equivalente al grep che ho postato, mi sembra molto
molto difficile che sia questo che vuole Umberto.. per dire: lo fa
al volo e a occhi chiusi, ne' con grep, ne' con perl, ma con awk che
conosce a memoria. [ci ho azzeccato, Umberto?]
La sintassi e' praticamente la stessa di grep:

awk '/[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]]/' input_file
--
Yoda
BIG Umberto
2021-08-09 10:22:06 UTC
Permalink
In date: Mon, 09 Aug 2021 03:45:56 on group: it.comp.os.linux.iniziare,
Post by Yoda
Post by enoquick
Post by BIG Umberto
Data una serie di stringhe, con frasi, parole varie, numeri,
virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10
lettere maiuscole
messe in qualsiasi ordine.
Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
echo '<line>' | perl -ne '/\p{uppercase}{10,}/ && print $_ '
Da me questo con perl prende solo 10 consecutive, pero' l'ho provato
dando "cat file_input" al posto di "echo '<line>'" che non capisco ciao
Comunque e' equivalente al grep che ho postato, mi sembra molto
molto difficile che sia questo che vuole Umberto.. per dire: lo fa
al volo e a occhi chiusi, ne' con grep, ne' con perl, ma con awk che
conosce a memoria. [ci ho azzeccato, Umberto?]
awk '/[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]]/' input_file
Di domenica avevo la testa in spiaggia, ma costreto a casa. Non ero connesso al cervello!
Mi ostinavo in cose tipo: .[A-Z][A-Za-z0-9\ \,\.\-\!]{10,}.

Ok, funzia, semplificata:
([[:upper:]].*){10,}

Mi serve la regola da mettere in tin, per castrare i post tutti maiuscoli che
ci sono in it.discussioni.consumatori.tutela.

Il test lo facevo con un file fittizio, purtroppo tin va in crash pcre con il
test uguale o superiore a 18 caratteri!

Thank!
--
BREAKFAST.COM Halted...Cereal Port Not Responding.
Yoda
2021-08-09 12:21:27 UTC
Permalink
Post by BIG Umberto
In date: Mon, 09 Aug 2021 03:45:56 on group: it.comp.os.linux.iniziare,
-snip-
Post by BIG Umberto
Post by Yoda
awk '/[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]]/' input_file
Di domenica avevo la testa in spiaggia, ma costreto a casa. Non ero connesso al cervello!
Mi ostinavo in cose tipo: .[A-Z][A-Za-z0-9\ \,\.\-\!]{10,}.
Ah ecco!
Post by BIG Umberto
([[:upper:]].*){10,}
Be' queste r{3} r{1,5} r{10,} non le conoscevo.. ottimo a sapersi,
sono utilissime! le ho trovate tutte nella manpagina. Comunque ci ho
messo un bel po' a trovare cos'e' che non avevi scritto per awk.
Ecco la riga completa come devo darla da me:

awk '/([[:upper:]].*){10,}/' file_input
Post by BIG Umberto
Thank!
Grazie anche a te ciao!

P.S. Vedo che le graffe per ripetere le prende anche grep, con la
stessa sintassi.. e io che credevo di saper tutto di grep:-((
--
Yoda
BIG Umberto
2021-08-09 13:27:01 UTC
Permalink
In date: Mon, 09 Aug 2021 14:21:27 on group: it.comp.os.linux.iniziare,
Post by Yoda
Post by BIG Umberto
In date: Mon, 09 Aug 2021 03:45:56 on group: it.comp.os.linux.iniziare,
-snip-
Post by BIG Umberto
Post by Yoda
awk '/[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]]/' input_file
Di domenica avevo la testa in spiaggia, ma costreto a casa. Non ero connesso al cervello!
Mi ostinavo in cose tipo: .[A-Z][A-Za-z0-9\ \,\.\-\!]{10,}.
Ah ecco!
Post by BIG Umberto
([[:upper:]].*){10,}
Be' queste r{3} r{1,5} r{10,} non le conoscevo.. ottimo a sapersi,
sono utilissime! le ho trovate tutte nella manpagina. Comunque ci ho
messo un bel po' a trovare cos'e' che non avevi scritto per awk.
awk '/([[:upper:]].*){10,}/' file_input
Post by BIG Umberto
Thank!
Grazie anche a te ciao!
P.S. Vedo che le graffe per ripetere le prende anche grep, con la
stessa sintassi.. e io che credevo di saper tutto di grep:-((
Anche sed prende le parentesi, ma bisogna stare attenti ad 'escaparle' con \{ e
}\.

Guardati, ma forse ne avevo già parlato tempo fa:
https://dy1an.xyz/arapsware
pure-bash-bible
pure-sh-bible

e le altre pazze cose che fa questa persona in bash!

Il suo demo 'pxltrm' lo sto ampliando a tempo perso, in qualcosa di mostruoso
editor ascii-art, con macro, copia-incolla, layers e tanto altro; ora sono ad
oltre 75K di dimensione. Prossimamente, vedrò di pubblicarlo. E' una sfida a
fare tutto esclusivamente con bash e nient'altro!
--
Se Darl McBride [il presidente di SCO] ne fosse incaricato,
probabilmente renderebbe anticostituzionale anche il matrimonio, poiché
chiaramente attenua la normale natura commerciale dell'interazione umana
ed è probabilmente un ostacolo importante alla crescita commerciale
della prostituzione. Linus Torvalds
enoquick
2021-08-12 01:44:07 UTC
Permalink
Post by Yoda
Post by enoquick
Post by BIG Umberto
Data una serie di stringhe, con frasi, parole varie, numeri,
virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10
lettere maiuscole
messe in qualsiasi ordine.
Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
echo '<line>' | perl -ne '/\p{uppercase}{10,}/ && print $_ '
Da me questo con perl prende solo 10 consecutive, pero' l'ho provato
dando "cat file_input" al posto di "echo '<line>'" che non capisco ciao
Comunque e' equivalente al grep che ho postato, mi sembra molto
molto difficile che sia questo che vuole Umberto.. per dire: lo fa
al volo e a occhi chiusi, ne' con grep, ne' con perl, ma con awk che
conosce a memoria. [ci ho azzeccato, Umberto?]
awk '/[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]]/' input_file
Si, scusatemi, ho preso una sbando

questo e' per contare il numero delle lettere maiuscole in una parola:

echo 'aAAnnnnXX' | perl -ne 'my @a=$_=~/\p{upper}/g; print scalar(@a);'


$ 4

Se serve

Comunque non si sa ancora quale sia il separatore tra una parola e l'altra
Una non lettera ?
Uno o piu spazi ?
--
|___|
BIG Umberto
2021-08-12 06:05:52 UTC
Permalink
In date: Thu, 12 Aug 2021 03:44:07 on group: it.comp.os.linux.iniziare,
Post by enoquick
Post by BIG Umberto
Data una serie di stringhe, con frasi, parole varie, numeri, virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10 lettere maiuscole
messe in qualsiasi ordine.
Non script, ma sola regex.
Si, scusatemi, ho preso una sbando
Come ho già risposto a Yoda, devo inserire la sola regex, quindi niente script,
in un parametro di un programma (tin per leggere i gruppi).

In pratica, ci sono gruppi che leggo, uno in particolare, in cui dei cretini
mettono il soggetto tutto in lettere maiuscole, per post con solo dei link che
non guarderò mai.
Post by enoquick
Comunque non si sa ancora quale sia il separatore tra una parola e l'altra
Una non lettera ?
Uno o piu spazi ?
Spazi, punti, virgole, parentesi, altre lettere minuscole, numeri, se poi sono
anche spammer, anche accentate e lettere straniere.

Peccato solo che tin, il programma, vada in errore se aumento il test a 18
maiuscole. Già con il test a 15 fa una pausa di alcuni secondi per processare i
messaggi sul server.
--
I puristi ritengono inopportuno utilizzare driver proprietari sutto Linux,
i masochisti amano utilizzare driver Windows sotto Linux... Twisted Evil
Yoda
2021-08-12 08:35:28 UTC
Permalink
Post by BIG Umberto
Peccato solo che tin, il programma, vada in errore se aumento il test a 18
maiuscole. Già con il test a 15 fa una pausa di alcuni secondi per
processare i messaggi sul server.
Prova a vedere con la sottrazione che ho postato adesso a Enoquick,
ma con sed perche' tr vede solo le A..Z ascii-128. In confronto alla
riga di awk forse e' piu' veloce ciao

Guarda per comodita'/velocita' te la posto senza variabili, cioe'
come penso da dare in pasto a tin:

echo "$(( $(cat $1 | wc -m) - $(sed 's/[[:upper:]]//g' $1 | wc -m) ))"

Questa la velocita' e' indipendente dal numero ariciao
--
Yoda
Yoda
2021-08-12 09:23:11 UTC
Permalink
Post by Yoda
Post by BIG Umberto
Peccato solo che tin, il programma, vada in errore se aumento il test a 18
maiuscole. Già con il test a 15 fa una pausa di alcuni secondi per
processare i messaggi sul server.
Prova a vedere con la sottrazione che ho postato adesso a Enoquick,
ma con sed perche' tr vede solo le A..Z ascii-128. In confronto alla
riga di awk forse e' piu' veloce ciao
Guarda per comodita'/velocita' te la posto senza variabili, cioe'
echo "$(( $(cat $1 | wc -m) - $(sed 's/[[:upper:]]//g' $1 | wc -m) ))"
Questa la velocita' e' indipendente dal numero ariciao
Questa e' ancora meglio, lascia passare solo le maiuscole:

sed 's/[^[:upper:]]//g' file_input

Pero' anche con questa, come con la precedente, poi bisogna contarle
e allora si perde tempo col test if -ge 18
--
bye, Yoda
Yoda
2021-08-12 08:14:42 UTC
Permalink
Addi' 12 ago 2021 01:44:07, enoquick scrive:

-snip-
Post by enoquick
$ 4
Se serve
Comunque non si sa ancora quale sia il separatore tra una parola e l'altra
Una non lettera ?
Uno o piu spazi ?
Con una riga del tutto arbitraria in input, conviene (penso!)
contare quello che togli, cosi' non hai da pensare a nulla:

------------------
#! /bin/bash

PRIMA="$(echo "$1" | wc -m)"
DOPO="$(echo "$1" | tr -d '[:upper:]' | wc -m)"
echo "$(( $PRIMA - $DOPO ))"
-------------

Esempio per testarla, ciao

$: ./contamaius 'hh>IuiksakooxxxooToMRRRbk jjutSS 32144@#@#!46'
8

P.S. Lo lascio cosi' magari qualcuno me lo sa dire per qual motivo
tr non sembra aggiornato all'ASCII esteso o meglio all'utf8 (o 32?)

Non va, conta solo A..Z, le accentate eccetera tr non le considera
lettere maiuscole. Ci vuole sed.. o perl ariciao

CORRIGE
------------------
#! /bin/bash

PRIMA="$(echo "$1" | wc -m)"
DOPO="$(echo "$1" | sed 's/[[:upper:]]//g' | wc -m)"
echo "$(( $PRIMA - $DOPO ))"
-------------
--
Yoda
BIG Umberto
2021-08-12 14:42:50 UTC
Permalink
In date: Thu, 12 Aug 2021 10:14:42 on group: it.comp.os.linux.iniziare,
Post by Yoda
-snip-
Post by enoquick
$ 4
Se serve
Comunque non si sa ancora quale sia il separatore tra una parola e l'altra
Una non lettera ?
Uno o piu spazi ?
Con una riga del tutto arbitraria in input, conviene (penso!)
------------------
#! /bin/bash
PRIMA="$(echo "$1" | wc -m)"
DOPO="$(echo "$1" | tr -d '[:upper:]' | wc -m)"
echo "$(( $PRIMA - $DOPO ))"
-------------
Esempio per testarla, ciao
Ciao Yoda.

Capisco il tuo fervore, ma come ho già detto più volte, posso mettere solo la
regex, non è possibile altro!

----------cut------------
comment=maiuscole
group=*
case=0
score=-1002
subj=([[:upper:]].*){15,}
----------cut------------

Il tempo, per processare 300 o più post, dipende solo da come tin, il
programma, gestisce i filtri.
Tre o quattro secondi, prima di aprire il gruppo, sono accettabili.

:)
--
Non fare domani quello che devi fare oggi, ma soprautto
non fare oggi quello che puoi fare domani...
Yoda
2021-08-12 15:38:37 UTC
Permalink
Post by BIG Umberto
In date: Thu, 12 Aug 2021 10:14:42 on group: it.comp.os.linux.iniziare,
Post by Yoda
------------------
#! /bin/bash
PRIMA="$(echo "$1" | wc -m)"
DOPO="$(echo "$1" | tr -d '[:upper:]' | wc -m)"
echo "$(( $PRIMA - $DOPO ))"
-------------
Esempio per testarla, ciao
Ciao Yoda.
Capisco il tuo fervore, ma come ho già detto più volte, posso mettere solo la
regex, non è possibile altro!
----------cut------------
comment=maiuscole
group=*
case=0
score=-1002
subj=([[:upper:]].*){15,}
----------cut------------
Il tempo, per processare 300 o più post, dipende solo da come tin, il
programma, gestisce i filtri.
Tre o quattro secondi, prima di aprire il gruppo, sono accettabili.
:)
Ah adesso capisco, la regexp la dai direttamente a tin. Non capisco
pero' perche' aumenta sensibilmente il tempo quando passi a 18.

Hai provato a dargli [ABCDEFGHIJKLMNOPQRSTUVWXYZ] invece di [A-Z]
o [[:upper:]]? perche' guarda che [A-Z] molti comandi la prendono
come equivalente alla [[:upper:]], contro quel che dice la man
pagina.
Si vede - penso - che c'entra il locale ciao e muoviti col tuo
mostruoso editor ascii-art, approfitta che siamo in vacanza!
--
Yoda
BIG Umberto
2021-08-12 16:21:29 UTC
Permalink
In date: Thu, 12 Aug 2021 17:38:37 on group: it.comp.os.linux.iniziare,
Post by Yoda
Post by BIG Umberto
In date: Thu, 12 Aug 2021 10:14:42 on group: it.comp.os.linux.iniziare,
Post by Yoda
------------------
#! /bin/bash
PRIMA="$(echo "$1" | wc -m)"
DOPO="$(echo "$1" | tr -d '[:upper:]' | wc -m)"
echo "$(( $PRIMA - $DOPO ))"
-------------
Esempio per testarla, ciao
Ciao Yoda.
Capisco il tuo fervore, ma come ho già detto più volte, posso mettere solo la
regex, non è possibile altro!
----------cut------------
comment=maiuscole
group=*
case=0
score=-1002
subj=([[:upper:]].*){15,}
----------cut------------
Il tempo, per processare 300 o più post, dipende solo da come tin, il
programma, gestisce i filtri.
Tre o quattro secondi, prima di aprire il gruppo, sono accettabili.
:)
Ah adesso capisco, la regexp la dai direttamente a tin. Non capisco
pero' perche' aumenta sensibilmente il tempo quando passi a 18.
Presumo si dovuto al modo che processa i vari blocchi dei filtri.

Deve applicare la regola ad ogni post, ma se identifica una regola ad un post,
deve guardare anche se a quello ci sono altre regole applicabili, per cui il
tempo si allunga.
Lo 'score' di un post è la somma di quelli di tutte le regole applicate.

Fino al test di 17 caratteri funziona, al 18° da errore 8 pcre, e non applica
tutte le regole.
Post by Yoda
Hai provato a dargli [ABCDEFGHIJKLMNOPQRSTUVWXYZ] invece di [A-Z]
o [[:upper:]]? perche' guarda che [A-Z] molti comandi la prendono
come equivalente alla [[:upper:]], contro quel che dice la man
pagina.
Si, ho provato.
Usando A-Z, upper o [ABC...Z] non cambia.

Ma non è un grosso problema, difficile che qualcuno posti una parola (o più
parole) di oltre 15 caratteri maiuscoli nel soggetto di un post!
--
Un tacchino all'agnello: Buona pasqua!
L'agnello al tacchino: Vaffaculo, buon Natale!
Mario M. Macaluso
2021-08-09 20:32:03 UTC
Permalink
Post by BIG Umberto
Data una serie di stringhe, con frasi, parole varie, numeri, virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10 lettere maiuscole
messe in qualsiasi ordine.
Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
sulla carta dovresti conoscerlo:

Mastering Regular Expressions, 3rd Edition
by Jeffrey E.F. Friedl

Length: 544 pages
Edition: 3
Language: English
Publisher: O'Reilly Media
Publication Date: 2006-08-15
ISBN-10: 0596528124
ISBN-13: 9780596528126
Continua a leggere su narkive:
Loading...