• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Letter uit zin extraheren.

Status
Niet open voor verdere reacties.

popipipo

Meubilair
Lid geworden
21 nov 2006
Berichten
8.426
Hoe kan ik het snelst de letter uit een zin extraheren.
 

Bijlagen

  • antwoord abc.xls
    19 KB · Weergaven: 43
Als de punten op het einde er altijd staan is dit zeer eenvoudig met een regular expression.

" ?([abcABC])[ .]"

ook zonder te punt is het niet heel moeilijk:

" ?([abcABC])[^A-Za-z]"

Er zijn vast makkelijkere dingen binnen excel mogelijk, maar zo zou ik het doen ;)

Code:
Function RegExpGet(TargetCell, Pattern As String, MatchNR As Integer)
    Dim RE As Object
    Dim MC As Object
    Dim M As Object

    Set RE = CreateObject("vbscript.regexp")
    RE.Pattern = Pattern
    RE.Global = True
    Set MC = RE.Execute(TargetCell)
    Set M = MC(0)
    If MatchNR > M.submatches.Count Then
        RegExpGet = ""
    Else
        RegExpGet = M.submatches(MatchNR - 1)
    End If
End Function

en dan:

=RegExpGet(A1;" ?([abcABC])[^A-Za-z]";1)
 
Laatst bewerkt:
Alhoewel ik niets van de oplossing begrijp heb ik hem wel succesvol (eenmalig en na hier en daar een punt te hebben toegevoegd) toegepast.
Hartelijk dank voor de oplossing.
 
Nou ja dat is natuurlijk ook niet goed. Regular expressions zijn gemeengoed op alle systemen behalve microsoft. Uiteindelijk hebben ze de mogelijkheid wel toegevoegd, maar wordt nog weinig gebruikt.

Regular expressions gaan over patroonherkenning. Je geeft een patroon op wat je zoekt en dan laat je het patroon zoeken door de engine. Hoewel ze er vaak ingewikkeld uitzien zijn ze redelijk eenvoudig als je de gedachte erachter snapt.

De RegEX die je hier zoekt is: een alleenstaande "A" of "B" etc. of aan het begin of eind

Deze werkt ook zonder punten:

=RegExpGet(A5;" ?([abcABC])([^A-Za-z]|$)";1)

Het patroon:
" ?" : graag een spatie voor het volgende deel
() : dit is het deel wat ik wil hebben / uitknippen
[abcABC] : ik zoek abcABC.
([^A-Za-z]|$) : niet gevolgd door een letter OF de letter staat op het eind van de zin

Dit zoekt dus naar een patroon van (liefst) een spatie, gevolgd door "ABC", gevolgd door geen letter OF het einde van de zin. Vervolgens wordt daar de A,B,C,a,b,c uitgeknipt en als antwoord gegeven
 
Laatst bewerkt:
Ik had er nog nooit van gehoord
Maar bedankt voor je uitleg
 
Wampier,

Eerst en vooral: knap gedaan!
Maar ben je zeker van dat vraagteken in het patroon? Zie bijlage voor een illustratie, rij 23 met gele highlight.
 

Bijlagen

  • ABCuitZin(1).xls
    39 KB · Weergaven: 45
Voor de geleverde dataset ben ik er zeker van :p eigenlijk is voor de volledige set:

Code:
"\b([abcABC])([^A-Za-z]|$)"
beter

Als er namelijk "A = beter" staat werkt jouw voorbeeld niet :) (dus zonder cijfer ervoor) met \b gaat het wel in alle gevallen, maar ik moet eerlijk zeggen dat ik naar de eigenlijke regex niet heel nauwkeurig heb gekeken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan