如何在程序生成Markdown表格时转义字符串

3
我使用C#从用户输入中以编程方式生成markdown表格。 编辑 考虑此演示代码:
var a = Console.ReadLine();
var b = Console.ReadLine();
var c = Console.ReadLine();

var markdownTableBuilder = new StringBuilder();
markdownTableBuilder.AppendLine("| Column A | Column B | Column C |");
markdownTableBuilder.AppendLine("| -------- | -------- | ---------|");

markdownTableBuilder.AppendLine($"| {a} | {b} | {c}");
markdownTableBuilder.AppendLine("");

Console.WriteLine(markdownTableBuilder.ToString());

我希望将a、b、c变量中的所有markdown语法进行转义。例如,如果用户输入像Hello | *world*这样的内容,它应该被转义为Hello \| \*world\*


我不是很确定你的意思,但是你是否可以写出类似下面的代码:foreach(Char char in string){ bool escaped = false; string noMarkDown = ""; if (char == '<'){ escaped = true; } if (char=='>'){ escaped = false; } if (!escaped){ noMarkDown += char; } } - ScottishTapWater
如果您是这个意思,请明确说明,我会将其写成答案。 - ScottishTapWater
@JamesHughes 抱歉,我不想删除字符。我想要将它们“转义”。请看我的修改。 - Matas
哦,好的,那么你可以将字符串转换为List<char>,然后迭代它,如果(charList[i+1]==listMarkdown.contains(i+1)),就添加转义字符。 - ScottishTapWater
1
@JamesHughes,是的,那也可以,但我认为grek40的解决方案更简单。不过,还是感谢你的建议! - Matas
我刚刚看了他的代码,确实更好,但我不知道如何使用正则表达式,祝你好运! - ScottishTapWater
1个回答

3
您可以使用正则表达式进行替换:
string escaped = Regex.Replace(userInput, @"([|\\*])", @"\$1");

这将查找任何'|', '\', '*' 字符并在其前面放置'\'

1
正确的代码是: string escaped = Regex.Replace(userInput, @"([|\\\\*])", @"\\$1"); - Artemious
Regex.Replace(userInput, $"([{Regex.Escape(@"|\*")}])", @"\$1") - Torbjörn Hansson

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