移植一些VB.NET代码时出现F#问题

时间:2011-12-17 22:12:56

标签: f#

我想将一些用于正则表达式的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#代码,以便它可以工作。

1 个答案:

答案 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)