Ich habe die Bibliothek FsVerbalExpressions verwendet, um einige Funktionen zu schreiben. Ich habe eine harte Zeit zu versuchen, ein regEx programmatisch zu erstellen.Programmatisch einen regulären Ausdruck F # mit der FsVerbalExpressions-Bibliothek erstellen
Zum Beispiel, wenn ich einen String "Int. Bus. Mach"
habe, kann ich entfernen Perioden und Whitespaces und mit der Anordnung am Ende
let splitString = [|"Int"; "Bus"; "Mach"|]
Was möchte ich einen regulären Ausdruck von splitString
so zu tun ist, zu bauen, dass seine Ergebnis:
let hardCoded =
VerbEx()
|> startOfLine
|> then' "Int"
|> anything
|> whiteSpace
|> then' "Bus"
|> anything
|> whiteSpace
|> then' "Mach"
hardCoded;;
val it : VerbEx =
^(Int)(.*)\s(Bus)(.*)\s(Mach) {MatchTimeout = -00:00:00.0010000;
Regex = ^(Int)(.*)\s(Bus)(.*)\s(Mach);
RegexOptions = None;
RightToLeft = false;}
Mein Problem ist, dass ich weiß nicht, wie dies programmatisch zu bauen, so dass, wenn die ursprüngliche Zeichenfolge "This is a much bigger string"
ist, wird die gesamte reguläre Ausdruck Code aufgebaut ist und nicht hart codiert. Ich kann einzelne reguläre Ausdrücke erstellen mit
let test =
splitString
|> Array.map (fun thing -> VerbEx()
|> then' thing)
|> Array.toList
aber dies ist eine Liste von VerbEx()
statt einer einzelnen VerbEx()
oben.
Weiß jemand, wie ich eine RegEx mit FsVerbalExpressions
programmgesteuert erstellen könnte?
Vielen Dank im Voraus für Ihre Hilfe!
Ich bin mäßig neu zu 'F #' und * definitiv * neuer Schreib Falten. Das ist sehr hilfreich. VIELEN DANK! – Steven
Sie können dies sogar ein wenig kürzer machen. Falte umgekehrt, um eta-reduction zu aktivieren: 'VerbEx() |> startOfLine |> Array.foldBack (lustiges Wort -> alles> whiteSpace >> dann 'word) [|" Mach "; "Bus"; "Int" |] ' – kaefer
@kaefer: das würde den Punkt der ansprechbaren Erklärung wirklich zunichte machen und bietet keinen wirklichen Nutzen. –