Avatar billede bbe1379 Nybegynder
13. marts 2005 - 23:29 Der er 6 kommentarer og
1 løsning

Fjern forbudte ord fra streng

Hejsa,

Jeg forsøger at lave en funktion, som erstatter bandeord og lign fra en streng. Jeg har forsøgt nedenstående regEx men det fanger også dele af ord, så hvis man sætter "pis" som ulovligt ord bliver "piske" til "#####ke"

        exclude = "fyord|fyord2|fyord3|fyord4"
        Set regEx = New RegExp
        regEx.Global = True
        regEx.IgnoreCase = True

        regEx.Pattern = "(^|[^a-z])" & exclude & "([^a-z]|$)"
        str = regEx.Replace (str, "######")
        Set regEx = Nothing



Performance er ret vigtigt, så 100 replace-funktioner er ikke så fedt....hvem kan hjælpe?
Avatar billede netro Nybegynder
14. marts 2005 - 10:17 #1
regEx.Pattern = "[\s\n](" & exclude & ")[\s\n]"

Prøv den...
Avatar billede yellow Nybegynder
14. marts 2005 - 11:21 #2
regEx.Pattern = "\b(" & exclude & ")\b"

netro's er næsten også ok, men fanger ikke hvis der står et bandeord som første ord i første linie, eller sidste ord i sidste linie.
Avatar billede netro Nybegynder
14. marts 2005 - 15:31 #3
Nej, den tænkte jeg ikke lige på.
Avatar billede bbe1379 Nybegynder
16. marts 2005 - 19:58 #4
det ser ud til at virke  - takker.

En rigtigt kuul ting....for at fortjene de 100 point, ville være et regEX hvor man kunne skrive feks.

"fyord|snot*|fyord3|fyord4"

altså * hvis det enkelte ord bare skulle være en del af et ord i strengen

så "|snot*|" også fanger "snotabe" og "|*snot*|" også fanger "abesnottet"

Kan det lade sig gøre?
Avatar billede yellow Nybegynder
16. marts 2005 - 20:41 #5
ja, du kan bruge \S* på hver side a snot.

exclude = "fyord|\S*snot\S*|fyord3|fyord4"

Eller hvis du kun vil bruge *, så kan du:
exclude = "fyord|*snot*|fyord3|fyord4"
exclude = Replace( exclude,"*","\S*")
Avatar billede bbe1379 Nybegynder
17. marts 2005 - 15:30 #6
Kuul!
Kan det passe at det betyder, at der skal være noget foran hvis der er *

Altså: "|*snot*|" ikke fanger snotabe?
Avatar billede yellow Nybegynder
18. marts 2005 - 07:04 #7
*snot* ( altså \S*snot\S* efter replace) skulle også fange snotabe.

\S* betyder "0-eller flere karaterer der ikke er whitespaces (space,tab,newline)"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester