在字符串C#中的两个字符之间提取子字符串

时间:2013-11-26 10:14:31

标签: c# string split substring

我生成的字符串有点像

($AverAbandCalls$+$TotalInboundCalls$)*50+$TotalOutboundCalls$

我想得到$符号之间的所有东西。我该怎么办?

我知道可以使用.Split完成 但是,这给了最后的答案

我想知道如果有办法以更简单的方式做到这一点。

5 个答案:

答案 0 :(得分:5)

试试这个正则表达式:

(?:\$).*?(?:\$)

由于您使用的是.NET,因此您也可以尝试balancing groups

(?<open>\$).*?(?<final-open>\$)

示例:

var input = @"($AverAbandCalls$+$TotalInboundCalls$)*50+$TotalOutboundCalls$";
var reg = new Regex(@"(?<open>\$).*?(?<final-open>\$)");
var matches = reg.Matches(input).Cast<Match>()
    .Select(m=>m.Groups["final"].Value).ToList();

foreach (var item in matches)
{
    Console.WriteLine(item);
}

哪个输出:

AverAbandCalls
TotalInboundCalls
TotalOutboundCalls

答案 1 :(得分:2)

使用正则表达式(正则表达式)。其中包含要匹配的模式的说明 - 在您的情况下,美元符号,一些非美元符号字符和另一个美元符号。

在.NET中,正则表达式支持位于System.Text.RegularExpressions库中,因此您必须在代码中引用它。

这是一个简单的例子:

string pattern = "\$([^\$]*)\$";
var matches = Regex.Matches(input, pattern);

答案 2 :(得分:0)

 string input = "($AverAbandCalls$+$TotalInboundCalls$)*50+$TotalOutboundCalls$";
 IEnumerable<string> matches =
        Regex.Matches(input, @"\$([^\$]+)\$")
        .OfType<Match>()
        .Select(m => m.Groups[1].Value);

此正则表达式使用“$”匹配文字\$字符,然后使用“$”匹配一个或多个不是[^\$]+的字符,然后使用另一个{{1再次使用“$”。

它使用圆括号“\$”围绕它之间的位,使其成为易于抓取的正则表达式组。

已经有一个默认的Regex Group(即整个比赛),所以我们在第1个指数中获取该组。

答案 3 :(得分:0)

你可以这样做

using System.Text.RegularExpressions;
using System;
public class Test
{
        public static void Main(){
                string s = "My name is $Dave$ and I am $18$ years old";
                Regex r = new Regex(@"$(.+?)$");
                MatchCollection mc = r.Matches(s);
                Console.WriteLine("Name is " + mc[0].Groups[1].Value);
                Console.WriteLine("Age is " + mc[1].Groups[1].Value);
        }
}

答案 4 :(得分:0)

这是一个没有任何正则表达式的简单方法:

string SubstringBetweenSymbols(string str, char preSymbol, char postSymbol)
    {
        int? preSymbolIndex = null;
        int? postSymbolIndex = null;


        for (int i = 0; i < str.Length; i++)
        {
            if (i == 0 && preSymbol == char.MinValue)
            {
                preSymbolIndex = -1;
            }
            if (str[i] == preSymbol && !(preSymbolIndex.HasValue && preSymbol == postSymbol))
            {
                preSymbolIndex = i;
            }
            if (str[i] == postSymbol && preSymbolIndex.HasValue && preSymbolIndex != i)
            {
                postSymbolIndex = i;
            }
            if (i == str.Length - 1 && postSymbol == char.MinValue)
            {
                postSymbolIndex = str.Length;
            }



            if (preSymbolIndex.HasValue && postSymbolIndex.HasValue)
            {
                var result = str.Substring(preSymbolIndex.Value + 1, postSymbolIndex.Value - preSymbolIndex.Value - 1);
                return result;
            }
        }

        return string.Empty;
    }

Pre和Post符号可能是char.MinValue,表示字符串或字符串结尾的开头。