gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:21:12 25 4
gpt4 key购买 nike

我正在实现一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com