我想将一些用于正则表达式的VB.NET代码转换为F#。 以下代码适用于VB.NET:
Dim regOpts As RegexOptions = RegexOptions.IgnoreCase Or RegexOptions.Singleline
Dim r As New Regex("<a[^>]*href\s*=\s*""?(?<HRef>[^"">\s]*)""?[^>]*>", regOpts)
但是F#中的相应代码无法得到遵守:
open System.Text.RegularExpressions
let regOpts: RegexOptions = RegexOptions.IgnoreCase ||| RegexOptions.Singleline
let reg = new Regex("<a[^>]*href\s*=\s*""?(?<HRef>[^"">\s]*)""?[^>]*>", regOpts)
我收到了编译错误:
错误:此值不是函数且无法应用
我相信F#不会识别双引号内的双引号,但对于VB.NET,没关系,我的代码工作正常。请告诉我如何修改F#代码,以便它可以工作。
答案 0 :(得分:3)
只需将"
转义为\"
,如here所述,而不是VB.NET转义(将它们加倍)。
let reg = new Regex("<a[^>]*href\s*=\s*\"?(?<HRef>[^\">\s]*)\"?[^>]*>", regOpts)
虽然更好的选择可能是将其更改为逐字字符串文字:
let reg = new Regex(@"<a[^>]*href\s*=\s*""?(?<HRef>[^"">\s]*)""?[^>]*>", regOpts)