Filter * uit een woord behalve aan het begin en einde

Status
Niet open voor verdere reacties.

tuning4you

Gebruiker
Lid geworden
3 jun 2007
Berichten
328
Iemand een idee hoe ik het karakter * uit een woord kan filteren?

Toegestaan is:
*woord*
woord*
*woord

Andere combinaties zijn niet toegestaan. Zoals bijvoorbeeld **woord*.

Ik denk dat dit best via regular expressions is maar hoe dit op te bouwen weet ik niet.
 
Hoi,

Is dit wat je bedoeld.

Code:
        Dim sText As String = "**woord*** en nog **een woord*"
        sText = System.Text.RegularExpressions.Regex.Replace(sText, "[*]{1,5}", "*")
Geeft *woord* en nog *een woord*

Code:
        Dim sText As String = "**woord***[COLOR="Red"]***[/COLOR] en nog **een woord*"
        sText = System.Text.RegularExpressions.Regex.Replace(sText, "[*]{1,5}", "*")
Geeft *woord** en nog *een woord*

Dus ....Replace(sText, "[*]{1,5} geeft aan hoeveel *-tjes er na elkaar moeten worden vervangen voor 1 *

Bron:http://www.regular-expressions.info/quickstart.html
 
Sorry voor mijn late antwoord.
Ik heb uw code eens uitgetest en dit ziet er op zich goed uit voor de * voor en na een woord. Enkel is er nog een probleem bij het gebruik van bijvoorbeeld *dit is een ******test**. Dit zou moeten omgevormd worden nar *dit is een test*. Dus enkel * toegestaan voor en achter de tekst.

Alvast bedankt voor uw hulp.
 
Probeer deze dan eens.

Code:
        Dim sText As String = Trim(" **woord***** en nog **een woord*")
        sText = System.Text.RegularExpressions.Regex.Replace(sText, "[*]{1,5}", "*")
        sText = sText.Replace("* ", " ")
        sText = sText.Replace(" *", " ")
        MsgBox(sText)
 
Uw laatste voorbeeld zal toch maar enkel een * voorafgegeaan door een spatie of gevolgd door een spatie gaan vervangen door een spatie? Ik denk niet dat dit het probleem oplost voor de * in een woord zoals bijvoorbeeld *dit is een *********test**.
 
Misschien dat ik het niet helemaal snap, maar mijn laatste voorbeeld geeft op *dit is een *********test**. het resultaat
*dit is een test*.

Je moet alleen de {1,5} veranderen in {1,10} of nog hoger bijvoorbeeld {1,100}
Dat is toch wat je wil?
 
dit is een**************test*************
geeft als uitkomst dit is een *test*, dus het lukt niet.
kan je niet vooraan en achteraan de tekst alle sterretjes vervangen door 1 ster indien aanwezig. en in het midden alle sterretjes verwijderen?
 
Ik zal begrijp er steeds minder van.

Wat is de bedoeling van het programmatje?

Een paar voorbeelden:
***Dit is een test*** = *Dit is een test*
Dit ***is*** een test = *Dit is een test
Dit is een***test*** = *Dit is een test*
Dit is een test*** = Dit is een test*
Dit is een test***en dit ook = *Dit is een test en dit ook

Dus als er ergens een * staat met nog tekens erachter dan vooraan eentje * plaatsen, als er na de tekens alleen nog maar een of meerdere *-tjes staan, dan achteraan 1 *



Graag bovenstaande voorbeelden aanpassen zodat duidelijk wordt wat de bedoeling is.
 
Ik heb het momenteel opgelost door een regex string op te geven waarbij men een foutmelding krijgt wanneer de input niet aan de voorwaarden voldoet. Dus niet dat het programma de filtering zelf doet. Voor mij hoef je er verder niet je hoofd over te breken dan :D.

De bedoeling is eigenlijk voor een search op active directory. Wanneer je zoekt met de input *test* krijg je geen fout, idem voor *test of test*. Je krijgt wel fouten als je zoekt met termen zoals **test*, *te***st*, test*** enz...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan