C#:搜索“v”,它可能会或可能不会出现在字符串的末尾

时间:2015-07-21 18:17:47

标签: c#

所以,我有一个C#字符串输入,可以是“ABCD12345678”或“ABCD1234”或“ABCD1233456v1”或“ABCD1233456v2”或“AVVV1233456v334”或“ABVV1233456V4”。

我需要操纵并删除最后一个或者可能不会发生“v”/“V”并得到如下结果: “ABCD1233456” “ABVV1233456” “AVVV1233456”

请帮忙。如果我直接使用子字符串,它只适用于发生“v”的那些,但是对于没有发生的情况会抛出异常。

3 个答案:

答案 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);
        }
    }
}