如何在多行字符串中转义引号?C#

3
我有一个包含多行的字符串,每行都包含多个引号("),这些引号在我的字符串中太多了,有些甚至我用反斜杠(\)也无法跳过。 我尝试使用第三方网站 (点击此处) 进行转义,但它会重组我的行,而我需要保留字符串的行格式,以便可以逐行进行正则表达式匹配。 问题是是否有一种简单的方法可以跳过所有这些引号?
下面是我的字符串模拟:
var stringHolder = @" book book "book"
ten ten "book" book pen
pen "hook book" dook
beer poor "111" cat map"

提前感谢您


1
英语不是我的母语,但当你说“skip”时,你的意思是“跳过”吗? - cantSleepNow
@cantSleepNow 抱歉,这也不是我的母语,我已经纠正了。谢谢。 - user9795291
1
你想要实现什么目标?在C#中,如果你使用verbatim string literal,那么你必须在其中的"标记上加倍。 - NetMage
我怎样才能看到其他的问题?这样我就可以和我的问题进行比较了。@NetMage - user9795291
当您刷新时,它会显示在您的问题顶部。 - NetMage
1个回答

9
为了在verbatim字符串(即使用@前缀声明的字符串)中转义双引号,只需要将双引号加倍即可("")。这与通常在字符串中转义双引号的方式\"不同。
var stringHolder = @" book book ""book""
ten ten ""book"" book pen
pen ""hook book"" dook
beer poor ""111"" cat map";
Console.WriteLine(stringHolder);
/*Output:
 book book "book"
ten ten "book" book pen
pen "hook book" dook
beer poor "111" cat map
*/

当缩进很重要时,你可能需要在编辑器中与普通制表符作斗争,这可能会导致一些奇怪的声明。

namespace MyNamespace {
    public class Foo {
        public string GetString() => @"Hello
World"; // Returns a string that looks like
        // Hello
        // World

        public string GetString2() => @"Hello
            World"; // Returns a string that looks like
                    // Hello
                    //             World
    }
}

虽然此功能目前仅适用于C# 11的预览版,但下面这种包含引号的多行字符串声明方式很可能在不久的将来可用。

var stringHolder = """
     book book "book"
    ten ten "book" book pen
    pen "hook book" dook
    beer poor "111" cat map
    """;
    
    Console.WriteLine(stringHolder);
/*Output:
 book book "book"
ten ten "book" book pen
pen "hook book" dook
beer poor "111" cat map
*/

目前,有关所需引用数量的规则(在此示例中为3)是标题和页脚引用至少为3个,或者是字符串中预期连续引用数量的N+1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接