所以,我有一个C#字符串输入,可以是“ABCD12345678”或“ABCD1234”或“ABCD1233456v1”或“ABCD1233456v2”或“AVVV1233456v334”或“ABVV1233456V4”。
我需要操纵并删除最后一个或者可能不会发生“v”/“V”并得到如下结果: “ABCD1233456” “ABVV1233456” “AVVV1233456”
请帮忙。如果我直接使用子字符串,它只适用于发生“v”的那些,但是对于没有发生的情况会抛出异常。
答案 0 :(得分:0)
private static string RemoveString (string input)
{
var indexOf = input.LastIndexOf("v", StringComparison.OrdinalIgnoreCase);
if (indexOf < 0)
return input;
return input.Substring(0, indexOf);
}
答案 1 :(得分:0)
private string ReplaceLastV(string input)
{
if (input.IndexOf("v", StringComparison.OrdinalIgnoreCase) > 0)
{
int lastIndexV = input.LastIndexOf("v", StringComparison.OrdinalIgnoreCase);
return input.Substring(0, lastIndexV);
}
return input;
}
答案 2 :(得分:0)
当你在最后说 时会有点混乱,因为 v 实际上并不是真的... 无论如何, Regex 怎么样?
public static class VRemover
{
public static string Process(string input)
{
var regex = new Regex(@"(?'util'[a-z]+\d+)(v\d*)?", RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
return regex.IsMatch(input)
? regex.Match(input).Groups["util"].Value
: input;
}
}
您可以使用此测试进行验证(NUnit):
[TestFixture]
public class VRemoverTests
{
[Test]
public void Test()
{
var inputs = new[]
{
"ABCD12345678",
"ABCD1234",
"ABCD1233456v1",
"ABCD1233456v2",
"AVVV1233456v334",
"ABVV1233456V4"
};
var expecteds = new[]
{
"ABCD12345678",
"ABCD1234",
"ABCD1233456",
"ABCD1233456",
"AVVV1233456",
"ABVV1233456"
};
for (var i = 0; i < inputs.Length; i++)
{
var actual = VRemover.Process(inputs[i]);
Assert.AreEqual(expecteds[i], actual);
}
}
}