所以在微软视觉工作室我有一个被编译成正则表达式的字符串。我的字符串是“#(\d+(.\d+)?)=(\d+(.\d+)?)”。我无法编译我的程序,因为我收到一条错误消息,指出 \d 是一个无法识别的转义字符。我如何告诉它闭嘴,让我像专业人士一样进行正则表达式?
问问题
121 次
4 回答
1
您还可以使用逐字字符串文字(由于可读性,我更喜欢使用这些文字)。
利用@"(#\d+(.\d+)?)=(\d+(.\d+)?)"
该符号表示字符串在到达结束之前@"
不应解释转义字符(以 a 为前缀的字符) 。\
"
"
注意:您可以通过双引号来匹配搜索模式中的单个""
。例如,您可以"Hello"
使用模式匹配@"""\w+"""
于 2012-08-21T19:14:07.247 回答
1
以 开头的字符串@
,这会导致编译器(几乎)将所有字符单独保留,未转义(例外是"
,可以转义为""
):
@"#(\d+(.\d+)?)=(\d+(.\d+)?"
于 2012-08-21T19:14:31.593 回答
1
问题是c#不喜欢\d
里面的字符串。改用逐字字符串
string pattern = @"#(\d+(.\d+)?)=(\d+(.\d+)?)";
“@”表示它。C# 不会在字符串中查找转义序列。如果你必须逃避一个"
使用两个""
。
当然,您可以使用普通字符串。但是你将不得不逃避反斜杠
string pattern = "#(\\d+(.\\d+)?)=(\\d+(.\\d+)?)";
于 2012-08-21T19:14:47.360 回答
1
如果您使用的是普通字符串,则需要转义反斜杠,如下所示:
"#(\\d+(.\\d+)?)=(\\d+(.\\d+)?)"
基本上,您将文字字符串放入 C#;C# 编译器首先看到字符串,并尝试将其解释\d
为转义序列(不存在,因此出错)。因此,您使用\\d
让 C# 编译器将字符串视为\d
,然后将其传递给正则表达式引擎(它确实识别\d
为有意义的东西)。(是的,如果你想在你的正则表达式模式中匹配一个文字反斜杠,你需要使用\\\\
)
但是在 C# 中,您可以选择只在字符串前面加上@
以使编译器不理会字符串(尽管"
仍然需要转义),所以就像这样:
@"#(\d+(.\d+)?)=(\d+(.\d+)?)"
于 2012-08-21T19:08:51.373 回答