我有一個生成的字符串有點像提取兩個字符之間的子字符串中的C#
($AverAbandCalls$+$TotalInboundCalls$)*50+$TotalOutboundCalls$
我想everythng那是$符號之間。我如何繼續?
我知道這可以使用.Split
完成但是,這給了最後的答案後,與字符串很多jungling。
我想知道如果有辦法以更簡單的方式做到這一點。
我有一個生成的字符串有點像提取兩個字符之間的子字符串中的C#
($AverAbandCalls$+$TotalInboundCalls$)*50+$TotalOutboundCalls$
我想everythng那是$符號之間。我如何繼續?
我知道這可以使用.Split
完成但是,這給了最後的答案後,與字符串很多jungling。
我想知道如果有辦法以更簡單的方式做到這一點。
試試這個正則表達式:
(?:\$).*?(?:\$)
由於您使用的是.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爲平衡組。 –
使用正則表達式(正則表達式)。這包含對匹配模式的描述 - 在您的情況下,美元符號,一些非美元符號字符和另一個美元符號。
在.NET中,正則表達式支持位於System.Text.RegularExpressions
庫中,因此您必須在代碼中引用它。
下面是一個簡單的例子:
string pattern = "\$([^\$]*)\$";
var matches = Regex.Matches(input, pattern);
我得到一個錯誤,因爲無法識別的轉義序列和$符號被加下劃線。是嗎? –
string input = "($AverAbandCalls$+$TotalInboundCalls$)*50+$TotalOutboundCalls$";
IEnumerable<string> matches =
Regex.Matches(input, @"\$([^\$]+)\$")
.OfType<Match>()
.Select(m => m.Groups[1].Value);
此正則表達式使用「\$
」比則一個或多個字符的字面$
字符匹配不是$
使用「[^\$]+
」,然後另一個$
使用「\$
」再次。
它使用圓括號「([^\$]+)
」圍繞位之間,使其成爲一個易於抓取的正則表達式組。
有將已經是一個默認的正則表達式組(即整場比賽),所以我們搶集團索引1
你可以這樣做
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);
}
}
這裏有一個簡單的方法,沒有正則表達式:
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;
}
前置和後置符號也許是char.MinValue,這意味着字符串或字符串結束的開始。
「但是,在與琴絃混雜在一起後,這給了最終的答案。」 ??? – nphx
'我想得到$ signs' - >'string.Split()'之間的所有東西都可以爲你工作**除非**你有更多的需求... –
請注意'+'和')*在'$'符號之間「也是」+「。 – Corak