【问题标题】:Split special string in c#在c#中拆分特殊字符串
【发布时间】:2015-11-28 08:16:17
【问题描述】:

我想用给定的输出分割下面的字符串。 谁能帮我做这件事。

示例

  1. /TEST/TEST123

输出:/Test/

  1. /TEST1/Test/Test/Test/

输出:/Test1/

  1. /文本/12121/1212/

输出:/文本/

  1. /121212121/asdfasdf/

输出:/121212121/

  1. 12345

输出:12345

我尝试过 string.split 函数,但效果不佳。是否有任何想法或逻辑可以实现以实现这种情况。 如果正则表达式中的答案对我来说没问题。

【问题讨论】:

  • 你能澄清一下你的问题吗?在这 4 个示例中,很难猜测您希望如何拆分字符串的逻辑。 String.Split() 方法最有可能做到这一点,如果你只是说你希望它如何完成。同时展示你尝试过的内容。
  • 我知道这很难,这就是为什么我在这里发布他的问题。我尝试了简单的拆分函数,它用“/”拆分字符串。它只在数组的 [1] 位置拆分并返回字符。
  • @V.J.只是想确认一下..对于数字2的结果,第一个字母是大写的,其余的都是小写的?

标签: c# regex string-split


【解决方案1】:

您只需要/ Spiting 的第一个结果

string output = input.Split('/')[0];

但如果你有//TEST/ 并且输出应该是/TEST 你可以使用正则表达式。

string output = Regex.Matches(input, @"\/?(.+?)\/")[0].Groups[1].Value;

对于您的第 5 种情况:您必须分离逻辑。例如:

public static string Method(string input)
{
    var split = input.Split(new[] {'/'}, StringSplitOptions.RemoveEmptyEntries);
    if (split.Length == 0) return input;
    return split[0];
}

或者使用正则表达式。

public static string Method(string input)
{
    var matches = Regex.Matches(input, @"\/?(.+?)\/");
    if (matches.Count == 0) return input;
    return matches[0].Groups[1].Value;
}

使用方法的一些结果:

TEST/54/    =>   TEST
TEST        =>   TEST
/TEST/      =>   TEST

【讨论】:

  • 他需要分离逻辑。等我修好了。
  • 这个正则表达式将捕获所有情况,无需分离逻辑:\/?[a-zA-Z0-9]+\/?
【解决方案2】:

我认为这可行:

    string s1 = "/TEST/TEST123";
    string s2 = "/TEST1/Test/Test/Test/";
    string s3 = "/Text/12121/1212/";
    string s4 = "/121212121/asdfasdf/";
    string s5 = "12345";

    string pattern = @"\/?[a-zA-Z0-9]+\/?";

    Console.WriteLine(Regex.Matches(s1, pattern)[0]);
    Console.WriteLine(Regex.Matches(s2, pattern)[0]);
    Console.WriteLine(Regex.Matches(s3, pattern)[0]);
    Console.WriteLine(Regex.Matches(s4, pattern)[0]);
    Console.WriteLine(Regex.Matches(s5, pattern)[0]);

【讨论】:

  • 你的正则表达式对我有用。谢谢老兄。
【解决方案3】:
   class Program
    {
        static void Main(string[] args)
        {
            string example = "/TEST/TEST123";

            var result = GetFirstItem(example);

            Console.WriteLine("First in the list : {0}", result);

        }

        static string GetFirstItem(string value)
        {
            var collection = value?.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
            var result = collection[0];
            return result;
        }
    }

StringSplitOptions.RemoveEmptyEntries 是一个枚举,它告诉Split 函数,当它将字符串拆分为数组时,如果数组中存在空字符串元素,则函数不应在结果中包含空元素.基本上你希望集合只包含值。

【讨论】:

  • StringSplitOptions.RemoveEmptyEntries 是一个枚举,它告诉 Split 函数,当它将字符串拆分为数组时,如果数组中有任何元素为空字符串,则该函数不应包含结果中的空元素。基本上你希望集合只包含值
  • 不错的答案。这就是我想要的。
【解决方案4】:
public string functionName(string input)
{
    if(input.Contains('/'))
    {
        string SplitStr = input.Split('/')[1];
        return "/"+SplitStr .Substring(0, 1) +SplitStr.Substring(1).ToLower()+"/"
    }
    return input;
}

【讨论】:

  • 感谢您的回答和时间。让我看看你的答案。
【解决方案5】:
output = (output.Contains("/"))? '/' +input.Split('/')[1]+'/':input;

【讨论】:

    【解决方案6】:
    private void button1_Click(object sender, EventArgs e)
    {
        string test = @"/Text/12121/1212/";
        int first = test.IndexOf("/");
        int last = test.Substring(first+1).IndexOf("/");
        string finall = test.Substring(first, last+2);
    }
    

    我在您的所有示例中尝试此代码并获得正确的输出。试试这个。

    【讨论】:

      【解决方案7】:

      以下方法可能对您有所帮助。

       public string getValue(string st)
       {
           if (st.IndexOf('/') == -1)
               return st;
           return "/" + st.Split('/')[1] + "/";
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多