【问题标题】:C# strip out not needed data using REGEX or something differentC# 使用 REGEX 或其他东西去除不需要的数据
【发布时间】:2018-07-30 21:50:34
【问题描述】:

所以我试图从字符串中删除数据,因为我在 WPF 中有一个看起来像 __,___ 的“预设”输入,现在用户必须输入类似 30,589 的内容,但是当用户只输入 @ 987654330@ 或50,它需要剥离其余部分(保留,)以适当地使输入值浮动。我现在的代码是这样的;

if (inp_km.Text == "__,___")
{
    team_results.results[inp_tour_part.SelectedIndex].km = 
        float.Parse("00,000", 
                    NumberStyles.AllowDecimalPoint, 
                    CultureInfo.GetCultureInfo("nl-NL")); // Give the new value
}
else
{
    team_results.results[inp_tour_part.SelectedIndex].km = 
        float.Parse(inp_km.Text, 
                    NumberStyles.AllowDecimalPoint, 
                    CultureInfo.GetCultureInfo("nl-NL")); // Give the new value
}

但是这段代码只是检查输入是否留空...有人可以帮帮我吗?

编辑

所以我添加了一个屏幕,这是用户获得的输入布局;

你可以看到,输入是“预填充”的,这样一个输入的内容是一个“字符串”,所以,假设我在第一个输入中输入了 5;

那么值(在 C# 中由 input_name.Text 检索)是 5_:__,但这是一个“错误”值,您无法填写此类内容,我如何检查是否还有 :_ 在输入中。

另外,底部输入也是一样的,不过接下来需要完整填写。

【问题讨论】:

  • 如果您能提供一个minimal reproducible example(控制台应用程序),其中包含至少 6 个样本输入以及每个样本输入的预期结果,那就太棒了。
  • 您是否使用stackoverflow.com/a/1103822/34092 进行预设?
  • 不使用该 SO 链接进行预设(掩码)。但我在“过滤”输入内容时遇到了麻烦。我也有时间 (HH:II) 有 : 作为掩码,但是当我得到输入并填写 5 时,它返回 5_:__ 我正在使用 Extended.Wpf.Toolkit ( github.com/xceedsoftware/wpftoolkit)
  • 你能详细说明你想要做什么吗?我根本不理解这部分:但是当用户只给出 5 或 50 时,它需要剥离其余部分(保留 ,)以正确地使输入值浮动。
  • 我不明白默认值设置部分。为什么不把它设置为0,0?你为什么要解析一个硬编码的字符串来获得一个浮点数?

标签: c# regex wpf replace


【解决方案1】:

因此,您要检查输入是否为以下两种形式之一:12,34512:34

这可以很容易地使用Regex 完成。

static void Main(string[] args)
{
    var inputComma = "12,345";
    var inputColon = "98:76";
    Regex regexComma = new Regex(@"^\d{2},\d{3}$");
    Regex regexColon = new Regex(@"^\d{2}:\d{2}$");

    var matchComma = regexComma.Match(inputComma);
    if (matchComma.Success)
    {                
        Console.WriteLine(inputComma);
    }

    Console.WriteLine();

    var matchColon = regexColon.Match(inputColon);
    if (matchColon.Success)
    {
        Console.WriteLine(inputColon);
    }

    Console.ReadLine();
}

注意:

您尚未完全阐明输入的有效格式。如果存在逗号(即,两位数字后跟逗号后跟三位数字),上述将严格评估为真 12,345 格式,并且对于冒号,仅格式为 12:34 的数字(前后两位数字)冒号)。

您可能希望根据您的确切标准修改您的Regex

【讨论】:

  • 它在这里检查正则表达式,但它总是返回冒号00:00和逗号00,000
  • 如果我尝试你给我的程序,它工作得很好,这是我正在使用的代码; gist.github.com/RosiersRobin/dc7992defb0e90b922f200eb34a85a47
  • 很抱歉,我无法为您调试整个代码。只需使用您的调试器并在执行Regex 之前查看inp_stop_kp.Text 的值。正如我的示例所示,如果该值采用预期格式,它应该会成功。
  • 它返回 00:00 inp_stop_kp.Text 这真的很奇怪
  • Inp_stop_kp_KeyDown() 事件中,您调用LoadResults(),后者又调用LoadDataInInputs(),在那里我可以看到一些值被分配给inp_stop_kp.Text。很可能这就是你的价值被重置的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
相关资源
最近更新 更多