檢查您提供的例子{ "12,3 m", "A12,3 m", "ABC3.45", "4.5 DEF"}
似乎字符串的位置,不僅可以改變,但可以有2串並在inputstrings一個小數。
該解決方案將向您展示如何僅用一個正則表達式提取這些數據,而無需手動分割字符串。我會從user1666620納入的CultureInfo:
string[] inputStrings = new string[] { "12,3 m", "A12,3 m", "ABC3.45", "4.5 DEF"};
Regex splitterRx = new Regex("([a-zA-Z]*)\\s*([\\d\\.,]+)\\s*([a-zA-Z]*)");
List<Tuple<string, decimal, string>> results = new List<Tuple<string, decimal, string>>();
foreach (var str in inputStrings)
{
var splitterM = splitterRx.Match(str);
if (splitterM.Success)
{
results.Add(new Tuple<string, decimal, string>(
splitterM.Groups[1].Value,
decimal.Parse(
splitterM.Groups[2].Value.Replace(".", System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator).Replace(
",", System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)
),
splitterM.Groups[3].Value
));
}
}
這會找個禮物/不存在字符串的所有可能的組合,前/後位置,所以一定要檢查各個琴絃或適用的任何組合LOGIK交給他們。
此外,它不僅檢查小數點和字符串之間是否存在單個空格,而且還檢查是否存在任意數量的空格。如果你想限制它只有0或1空格,而不是替換正則表達式:
Regex splitterRx = new Regex("([a-zA-Z]*)[ ]{0,1}([\\d\\.,]+)[ ]{0,1}([a-zA-Z]*)");
你試過Regex.Split()來分割你的值基於或。或空格,具體取決於你希望如何拆分 – Megha
你是在分割小數字符還是數字和字母字符之間的空格? – user1666620
是的,可以做一個拆分和應用Regx,但尋找單線解決方案 –