F#正则表达式字符串模式改变含义

时间:2011-12-18 14:14:27

标签: f#

我在F#中有另一个正则表达式的问题:

let tagName = "div"
let ptnTagNotClose = "<" + tagName + "(>|\s+[^>]*>)[^<]"

我想在HTML文件中找到不关闭标记的匹配项。模式字符串在VB.NET中工作。 但对于F#,当我调试上面的代码时,我可以看到ptnTagNotClose的值:

ptnTagNotClose "<div(>|\\s+[^>]*>)[^<]"

F#自动将“\ s +”更改为“\\ s +”,但对于正则表达式,“\ s +”和“\\ s +”不同,结果也不同。 请让我知道如何避免F#自动更改字符串模式。

逐字字符串文字可以是一个解决方案,但由于tagName可以更改,即让tagName =“br”,那么在这种情况下如何应用逐字字符串文字?

谢谢!

约翰

1 个答案:

答案 0 :(得分:2)

我不认为调试输出意味着你的想法;使用逐字字符串(如"<" + tagName + @"(>|\s+[^>]*>)[^<]")将给出完全相同的结果,因为\s不是有效的转义序列,因此F#将反斜杠解释为文字反斜杠而不是转义符。