C# 如果特定捕获组的值等于零,则替换该值

C# 如果特定捕获组的值等于零,则替换该值,c#,C#,如果特定的捕获组值在C#中等于0(零),是否可以用另一个值替换该值 基本上我输入的是MHz频率,它接受100.000-199.999的值。我想要的是,如果最后两个数字是零,我想删除它们。例如,如果输入是197.900,我想用197.9替换它。如果是197.990=>197.99。如果197.090=>197.09…以此类推 此外,删除数字后,我想将字符串重写为XXX点XXX Regex.Replace(input, "\b([1-9])([0-9])([0-9]).([0-9])([0-9])(

如果特定的捕获组值在C#中等于0(零),是否可以用另一个值替换该值

基本上我输入的是MHz频率,它接受100.000-199.999的值。我想要的是,如果最后两个数字是零,我想删除它们。例如,如果输入是197.900,我想用197.9替换它。如果是197.990=>197.99。如果197.090=>197.09…以此类推

此外,删除数字后,我想将字符串重写为XXX点XXX

Regex.Replace(input, "\b([1-9])([0-9])([0-9]).([0-9])([0-9])([0-9])\b", "$1 $2 $3 point $4 $5 $6");
我只是不知道该怎么做。

试试这个:

string input = "199.090";
string result = String.Empty;
Match match = Regex.Match(input, "([1-9])([0-9])([0-9]).([0-9])([0-9])([0-9])");
if (match.Success)
{
    result = match.ToString().TrimEnd(new [] {'0'});
}
result.Dump();
Dump()
的输出:


199.09

您可以使用以下代码

input.TrimEnd('0');
这将删除尾随的0以截断零:

string text = "Frequencies are 193.200 and 194.220 MHz. Sometimes all three digits are used: 195.123";
string output = Regex.Replace(text, @"\b[1-9]\d{2}\.\d{3}\b", m => m.Value.TrimEnd('0'));
输出:

Frequencies are 193.2 and 194.22 MHz. Sometimes all three digits are used: 195.123
Frequencies are 193 point 2 and 194 point 22 MHz. Sometimes all three digits are used: 195 point 123
193 point 2, 194 point 22, 195 point 123, 196 point 0.
截断零并将
替换为

string text = "Frequencies are 193.200 and 194.220 MHz. Sometimes all three digits are used: 195.123";
string output = Regex.Replace(text, @"\b([1-9]\d{2})\.(\d{3})\b",
                              m => string.Format("{0} point {1}",
                                                 m.Groups[1].Value,
                                                 m.Groups[2].Value.TrimEnd('0')));
输出:

Frequencies are 193.2 and 194.22 MHz. Sometimes all three digits are used: 195.123
Frequencies are 193 point 2 and 194 point 22 MHz. Sometimes all three digits are used: 195 point 123
193 point 2, 194 point 22, 195 point 123, 196 point 0.
要处理小数部分为
0
的数字,例如:
196.000
,可以使用以下代码:

string text = "193.200, 194.220, 195.123, 196.000.";
string output = Regex.Replace(text, @"\b([1-9]\d{2})\.(\d)(\d{2})\b",
                              m => string.Format("{0} point {1}{2}",
                                                 m.Groups[1].Value,
                                                 m.Groups[2].Value,
                                                 m.Groups[3].Value.TrimEnd('0')));
输出:

Frequencies are 193.2 and 194.22 MHz. Sometimes all three digits are used: 195.123
Frequencies are 193 point 2 and 194 point 22 MHz. Sometimes all three digits are used: 195 point 123
193 point 2, 194 point 22, 195 point 123, 196 point 0.

完整的输入字符串有多长?还请注意,您的。未转义,您的正则表达式接受199A123等。使用\。而是强制一个句点。输入字符串长度不同。它还包含一些其他信息。然而,MHz频率本身是XXX.XXX(包括圆点)。比我想象的要容易得多。谢谢你提供了清晰的例子@Zach注意到它在
193.000
情况下存在问题,它将转换为
193.
193点
。不知道您是否有这样的值。在对代码进行了更多的修改(您提供的上一个修订版)后,它仍然有问题。如果我有193.010,它会将其重写为
193点1
,而不是
193点01