C#使用正则表达式或其他方法去除不需要的数据
所以我试图从字符串中删除数据,因为我在WPF中有一个“预设”输入,看起来像C#使用正则表达式或其他方法去除不需要的数据,c#,regex,wpf,replace,C#,Regex,Wpf,Replace,所以我试图从字符串中删除数据,因为我在WPF中有一个“预设”输入,看起来像\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,现在用户必须输入类似30589,但当用户只输入5或50,它需要删除其余部分(保留,)以适当地使输入值浮动。我现在拥有的代码如下所示 if (inp_km.Text == "__,___") { team_results.results[inp_tour_part.SelectedIndex].km = float.Parse("00,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,现在用户必须输入类似30589
,但当用户只输入5
或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
然后值(通过输入\u name.Text
)在C中检索)是5:\uuu
,但这是一个“错误”的值,您不能填写这些内容,我如何检查输入中是否仍然存在:
或
此外,底部输入是相同的,但需要完全填写。因此,您需要检查输入是否为以下两种形式之一:
12345
或12: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();
}
注:
您还没有完全澄清输入的有效格式。对于12345
格式,如果存在逗号(即,两位数字后跟一个逗号,后跟三位数字),上述将严格评估为真;对于冒号,仅限格式12:34
(冒号前后两位数字)的数字
您可能希望根据您的确切标准修改您的
Regex
。如果您可以提供一个(控制台应用程序),其中至少包含6个示例输入和每个示例输入的预期结果,那将是非常棒的。您是否使用该预设?而不是使用该SO链接进行预设(掩码)。但我很难从输入中“过滤”出东西。我也有时间(HH:II),它有:作为掩码,但是当我得到输入时,只要填写5
,它就会返回5:\uuuu
,我正在使用Extended.Wpf.Toolkit
()你能详细说明你到底想做什么吗?我完全不理解这一部分:但当用户只给出5或50时,它需要去掉其余部分(保留,)以适当地使输入值浮动。我不理解默认值设置部分。为什么不直接将其设置为0,0
?为什么要解析硬编码字符串以获得浮点值?它在这里检查正则表达式,但总是返回冒号00:00
和逗号00000
如果我尝试你给我的程序,它工作得很好,这就是我正在使用的代码;很抱歉,我无法为您调试整个代码。在执行Regex
之前,只需使用调试器查看inp\u stop\u kp.Text的值即可。如我的示例所示,如果值的格式符合预期,它应该会成功。它返回00:00inp\u stop\u kp.Text
,这在调用inp\u stop\u kp\u KeyDown()
事件的LoadResults()
中非常奇怪,而后者又调用LoadDataInInputs()
,在那里我可以看到一些值被分配给inp\u stop\u kp.Text
。很可能这就是重置值的地方。