gpt4 book ai didi

.net - 如何从字符串中删除加速符?

转载 作者:行者123 更新时间:2023-12-01 13:05:05 24 4
gpt4 key购买 nike

我有一个 GUI 控件的标题,我想将它转换为一个简单的文本字符串。具体来说,我想删除加速器元字符。

例如(示例假设 WinForms):

  • 去除单个出现的元字符:&Yes 变为 Yes
  • 将两次出现转换为一次出现:Income && Expense 变为 Income & Expense

我的代码将知道它是在处理 Windows 窗体语法(其中加速器元字符是 &)还是 WPF(它是 _)。但是,这是在后端代码中,所以我不想依赖任何 WinForms 或 WPF 库函数——我需要使用核心(非 GUI)BCL 程序集来执行此操作。 (在这一点上,我认为任何适用于 WinForms 的东西对于 WPF 来说都是微不足道的。)

我可以想到几种方法来做到这一点,但不清楚哪种最简单。

什么是最简单的方法来实现这个“如果是单字符则删除元字符,如果是双字符则去双字符”?

更新:我曾假设 WinForms 和 WPF 处理这些问题的方式基本相同,但事实证明它们并非如此。 WinForms 将在字符串末尾去除一个单独的元字符(Foo& 变为 Foo),但 WPF 不会(Foo_ 仍然是 Foo_ )。解决这两个问题的答案可加分。

最佳答案

我已经编辑(删除)了我之前的回答。我认为最简单的方法是这个正则表达式:

string input = "s&trings && stuf&f &";
input = Regex.Replace(input, "&(.)", "$1");

这可以正确处理重复的符号以及符号是最后一个字符的情况。

编辑,基于额外提供的信息:

因此 WinForms 表达式将是 "&(.?)",而 WPF 表达式将是 "_(.)"。您要求解决这两种情况的解决方案,但我不确定您在问什么。您最初的问题是说代码知道它是在处理 WPF 格式还是 WinForms 格式。所以我会设想一种方法:

string StripAccelerators(string s, bool isWinForms)
{
string pat = (isWinForms) ? "&(.?)" : "_(.)";
return Regex.Replace(s, pat, "$1");
}

而且,是的,我意识到在界面中使用 Boolean 标志并不理想。理想情况下,您会使用枚举类型,或者可能有两个单独的方法。

我认为您不希望有一个正则表达式来同时执行这两项操作。这是可能的,但是您最终会从 WinForms 字符串中删除下划线,或从 WPF 字符串中删除 & 符号。

关于.net - 如何从字符串中删除加速符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3700612/

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