В простом случае, подобном этому, лучшим подходом является простое разбиение строки:
string input = "foo|bar|baz";
string[] things = input.Split('|');
things[1] = "roflcopter";
string output = string.Join("|", things); // output contains "foo|roflcopter|baz";
Это зависит от нескольких вещей:
- Всегда есть 3 строки текста с разделителями.
- Между трубами нет незначительных промежутков.
Чтобы исправить второе, сделайте что-то вроде:
for (int i = 0; i < things.Length; ++i)
things[i] = things[i].Trim();
Для удаления пробелов из начала и конца каждого элемента.
Общее правило с регулярными выражениями состоит в том, что они обычно должны быть вашим последним средством; не твой первый. :)