Поскольку я не совсем доволен реализацией регулярного выражения F # для моего использования, я хотел реализовать так называемую цепочку регулярных выражений . Он в основном работает следующим образом:F # Regex matching chain
Данная строка s
будет проверена, соответствует ли она первому шаблону. Если это так, он должен выполнить функцию, связанную с первым шаблоном. Если это не так, оно должно продолжаться со следующего.
Я пытался реализовать его следующим образом:
let RegexMatch ((s : string, c : bool), p : string, f : GroupCollection -> unit) =
if c then
let m = Regex.Match(s, p)
if m.Success then
f m.Groups
(s, false)
else (s, c)
else (s, c)
("my input text", true)
|> RegexMatch("pattern1", fun g -> ...)
|> RegexMatch("pattern2", fun g -> ...)
|> RegexMatch("pattern3", fun g -> ...)
|> .... // more patterns
|> ignore
Проблема заключается в том, что этот код является недействительным, так как оператор вперед трубы, кажется, не трубы кортежей или не нравится моя реализация «дизайн» ,
Мой вопрос: Могу ли я исправить этот код выше легко или лучше реализовать какую-либо другую цепочку регулярных выражений?
«* Как Я не совсем доволен реализацией регулярного выражения F # * «F # не имеет регулярной реализации. .NET делает, .NET Core делает, Mono делает, но F # не знает, что такое регулярное выражение. – ildjarn
Другим подходом было бы сделать эту ориентированную на данные: поместите пары регулярных выражений в список и используйте 'List.tryPick' для запуска функции для первого соответствующего регулярного выражения. Это позволит вам динамически наращивать функции регулярных выражений. – TheQuickBrownFox