我生成的字符串有点像
($AverAbandCalls$+$TotalInboundCalls$)*50+$TotalOutboundCalls$
我想得到$符号之间的所有东西。我该怎么办?
我知道可以使用.Split
完成
但是,这给了最后的答案
我想知道如果有办法以更简单的方式做到这一点。
答案 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,表示字符串或字符串结尾的开头。