如何将上标字符转换为C#字符串中的普通文本

How to convert superscript characters to normal text in C# string

我有带有数学表达式的字符串,例如 2⁻¹² + 3³ / 4⁽³⁻¹⁾

我想将这些字符串转换成2^-12 + 3^3 / 4^(3-1)的形式。

到目前为止我得到的是我可以提取上标数字并在前面添加 ^.

Fiddle 以下代码:https://dotnetfiddle.net/1G9ewP

using System;
using System.Text.RegularExpressions;
                    
public class Program
{
    private static string ConvertSuperscriptToText(Match m){
        string res = m.Groups[1].Value;
            
        res = "^" + res;
        return res;
    }
    public static void Main()
    {
        string expression = "2⁻¹² + 3³ / 4⁽³⁻¹⁾";
        string desiredResult = "2^-12 + 3^3 / 4^(3-1)";
        
        string supChars = "([¹²³⁴⁵⁶⁷⁸⁹⁰⁺⁻⁽⁾]+)";
        string result = Regex.Replace(expression, supChars, ConvertSuperscriptToText);

        Console.WriteLine(result); // Currently prints 2^⁻¹² + 3^³ / 4^⁽³⁻¹⁾
        Console.WriteLine(result == desiredResult); // Currently prints false
    }
}

如何在不逐一替换的情况下替换上标字符?

如果我必须一个一个地替换它们,我如何使用类似于 PHP 的 str_replace 的集合之类的东西来替换它们,它接受数组作为搜索和替换参数?

奖金问题,如何将各种上标字符替换为普通文本并返回上标?

您只需要一个字典来映射这些值,然后您可以使用 Linq 将它们翻译过来并从中创建一个新字符串。

private static Dictionary<char, char> scriptMapping = new Dictionary<char, char>()
{
    ['¹'] = '1',
    ['²'] = '2',
    ['³'] = '3',
    ['⁴'] = '4',
    ['⁵'] = '5',
    ['⁶'] = '6',
    ['⁷'] = '7',
    ['⁸'] = '8',
    ['⁹'] = '9',
    ['⁰'] = '0',
    ['⁺'] = '+',
    ['⁻'] = '-',
    ['⁽'] = '(',
    ['⁾'] = ')',
};

private static string ConvertSuperscriptToText(Match m){
    string res = m.Groups[1].Value;

    res = "^" + new string(res.Select(c => scriptMapping[c]).ToArray());
    return res;
}

您还可以从字典创建正则表达式,这样只有一个地方可以添加新的下标。

string supChars = "([" + new string(scriptMapping.Keys.ToArray()) + "]+)"