Ich versuche zu ersetzen? mit „Ein“, wenn nachfolgenden Wort beginnt mit einem VokalTeil des gesuchten Musters in Regex zurücksetzen
(define (f str)
(println (regexp-replace* #rx"\\? [aeiou]" str "An ")))
(f "? apple.")
Es funktioniert, aber es nimmt ‚a‘ von ‚Apfel‘. Die Ausgabe lautet:
"An pple."
Mit '&' -Muster gesamte Such zurück in String ersetzt:
(println (regexp-replace* #rx"\\? [aeiou]" str "An &"))
Ausgang:
"An ? apple."
Wie kann ich wieder nur 'a' oder was auch immer Vokal wurde am Anfang des Wortes gefunden?
Probieren Sie eine Erfassungsgruppe für '([aeiou])' und schreiben Sie sie dann in die Ersetzung zurück . Oder, wenn die Engine dies unterstützt, verwenden Sie eine Lookahead Assertion '(? = [Aeiou])' – sln
Beide funktionieren, aber die Ausgabe bleibt gleich. – rnso
Warum sind diese Klammern "\\ [\\? \\]" und nicht diese "[aeiou]" ist das BRE-Aroma? In einem echten Sinn ist die Regex das? (? = [aeiou]) 'und ersetzen ist' An '_or_' \? ([aeiou]) 'und ersetzen ist' An $ 1' – sln