2016-08-25 2 views
1

Я использую C# для программной генерации таблиц разметки с пользовательского ввода.Как избежать строки при программном создании таблицы уценки

Редактировать

Рассмотрим демонстрационный код:

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()); 

Я хочу, чтобы избежать всех уценки синтаксис от а, Ь, с переменными. Например, если пользователь вводит что-то вроде Hello | * world *, его следует скрыть до Hello \ | \ * Мир \ *

+0

Не совсем уверен, что вы имеете в виду, но вы могли бы написать что-то вроде: 'foreach (Char char в строке) {bool escaped = false; string noMarkDown = ""; if (char == '<') {escaped = true;} if (char == '>') {escaped = false;} if (! escaped) {string + = char;}} ' –

+0

Если это то, что вы имеете в виду так что я напишу это как ответ –

+0

@JamesHughes извините, но я не хочу удалять символы. Я хочу «убежать» от них. См. Мое редактирование. – Matas

ответ

2

Вы можете использовать регулярное выражение для замены:

string escaped = Regex.Replace(userInput, @"([|\*])", @"\$1"); 

Найдет любой '|', '\', '*' характер и поставить '\' перед ним.

+0

это не будет замените символ \, потому что символ обратной косой черты \ здесь означает экранирование символа '*'. Нам нужна двойная обратная косая черта здесь. Правильный код: 'string escaped = Regex.Replace (userInput, @" ([| \\ * ]) ", @" \ $ 1 ");' – Artemious

Смежные вопросы