c# - .NET Regex - 一次替换多个字符而不覆盖?

标签 c# .net regex encryption replace

我正在实现一个 C# 程序,该程序应自动执行单字母替换密码。 我目前正在开发的功能是最简单的功能:用户将提供纯文本和密码字母表,例如:

纯文本(输入):这是一个测试

密码字母表:A -> Y, H -> Z, I -> K, S -> L, E -> J, T -> Q

密文(输出):QZKL KL QJLQ

自从我用 perl 编程一段时间以来,我就想过使用正则表达式,但我在 c# 上遇到了一些问题。 首先,我想知道是否有人会提出一个正则表达式的建议,该正则表达式会立即用相应的密码字母(由用户提供)替换所有出现的每个字母,而不会覆盖任何内容。

示例:

在这种情况下,用户提供明文“TEST”,在他的密码字母表中,他希望将所有 T 替换为 E,将 E 替换为 Y,将 S 替换为 J。我的第一个想法是替换每次出现的一个带有单个字符的字母,然后用与提供的明文字母相对应的密文替换该字符。

使用相同的示例词“TEST”,程序提供答案所采取的步骤是:

  1. 将 T 替换为(比方说)@
  2. 用#替换E
  3. 用&替换S
  4. 将@替换为E,将#替换为Y,将&替换为j
  5. 输出 = EYJE

此解决方案似乎不适用于大文本。 我想知道是否有人能想到一个正则表达式,它允许我用 26 个字母的密码字母表中相应的字母替换给定文本中的每个字母,而不需要在中间步骤中拆分任务,因为我提到。

如果它有助于可视化过程,这是我的程序 GUI 的打印屏幕:alt text http://img43.imageshack.us/img43/2118/11618743.jpg

最佳答案

您还可以制作源字符到目标字符的映射,然后简单地循环遍历字符串并随时替换:

Dictionary<char, char> replacements = new Dictionary<char, char>();

// set up replacement chars, like this
replacements['T'] = '@';
replacements['E'] = '#';
replacements['S'] = '&';
replacements['@'] = 'E';
replacements['#'] = 'Y';
replacements['&'] = 'J';

// actually perform the replacements
char[] result = new char[source.Length];
for (int i = 0; i < result.Length; i++) {
    result[i] = replacements[source[i]];
}

return new string(result);

关于c# - .NET Regex - 一次替换多个字符而不覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3031648/

相关文章:

c# - 为什么在函数返回值后执行 C# 上整数的增量?

.net - 在NAnt构建脚本中处理密码

python - 如何从该输入字符串中提取数字

java - 替换所有出现的 .用于标准化

c# - 更改应用程序池的标识时出错

c# - 如何从 Windows 10 IoT 托管临时 802.11 网络

c# - 将 Base64 值转换为数字

c# - 我无法让 Combobox 重绘

c# - 是否有用于 Pow(decimal, decimal) 的数学 API

html - 在 mysql 中删除所有 anchor 标记和其中的任何内容