Как указывалось в комментариях, вы обычно должны использовать некоторые технологии презентации для этого вида форматирования. Например, в HTML вы можете отобразить ваш текст через:
<span>H<sub>2</sub>O</span>
Однако Unicode выделяет блок верхних и нижних индексов для шестнадцатеричных символов, которыми вы можете воспользоваться. Поскольку Unicode поддерживается в .NET, в том числе внутри строковых литералов, вы можете напрямую использовать желаемый символ:
text = text.Replace("H2O", "H₂O");
Примечание : Использование индекса Unicode гарантирует, что ваша строка H₂O
будет корректно отображаться в любом приложении с поддержкой Unicode, независимо от технологии форматирования (HTML, RTF, PDF, XPS и т. Д.) .
Ниже приведен скриншот, показывающий, как строка отображается в TextBox
в Windows Forms. Чтобы улучшить удобочитаемость, шрифт был изменен на Cambria, 11.25pt.
![H₂O as rendered in a TextBox under Windows Forms](https://i.stack.imgur.com/WaVte.jpg)
Редактировать : Если вы хотите преобразовать все цифры (не только 2
в ₂
), вы можете использовать код @ Tobias. Вот адаптация этого выражения. Я включил вид сзади, так как я предполагаю, что всем цифрам, которые будут подписаны, должна предшествовать буква.
text = Regex.Replace(text, @"(?<=[A-Za-z])\d",
match => ((char)(match.Value[0] - '0' + '₀')).ToString());
Приведенное выше преобразовало бы строку вроде
CF3CH2Cl + Br2 → CF3CHBrCl + HBr
в
CF₃CH₂Cl + Br₂ → CF₃CHBrCl + HBr