Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串拆分为c中的数字和字母#_C#_String - Fatal编程技术网

C# 将字符串拆分为c中的数字和字母#

C# 将字符串拆分为c中的数字和字母#,c#,string,C#,String,我有一根这样的绳子 12,3 m我需要两个子字符串一个十进制值和一个单位,如12,3和m 12.3将返回12.3和m 123,4 c将返回123,4和c 小数分隔符可以是。或者 那么,我如何才能在C#中获得它,而不需要遍历下面的每个字符 char c; for (int i = 0; i < Word.Length; i++) { c = Word[i]; if (Char.IsDigit(c)) string1 += c; else string2 +=

我有一根这样的绳子

12,3 m
我需要两个子字符串一个十进制值和一个单位,如
12,3
m

12.3
将返回
12.3
m

123,4 c
将返回
123,4
c

小数分隔符可以是。或者

那么,我如何才能在C#中获得它,而不需要遍历下面的每个字符

char c;

for (int i = 0; i < Word.Length; i++)
{
  c = Word[i];

  if (Char.IsDigit(c))
    string1 += c;
  else
    string2 += c;
}
charc;
for(int i=0;i

字符串输入实际上不需要这样格式化,它可以是A12,3 m或ABC3.45或4.5 DEF等格式。因此字符串拆分并不稳定始终

看起来您正在尝试根据空格字符进行拆分:

input = "12.3 c";
string[] stringArray = string.Split(input, ' ');
然后可以对数组的第一个元素执行
float.Parse
操作。
float.Parse
使用的十进制分隔符取决于您的区域性,如果选择了错误的分隔符,则可能会出现
FormatException

您也可以通过以下程序选择十进制分隔符:

culture.NumberFormat.NumberDecimalSeparator = "."; // or ","

检查您提供的示例
{“12,3 m”、“A12,3 m”、“ABC3.45”、“4.5 DEF”}
似乎字符串位置不仅可以更改,而且输入字符串中可以有两个字符串和一个小数

此解决方案将向您展示如何仅使用一个正则表达式而无需手动拆分字符串来提取这些数据。我将合并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
        ));
    }
}

您是否尝试使用Regex.Split()根据或分割值。还是空白取决于您希望分割的方式您是按十进制字符分割,还是按数字和字母字符之间的空白分割?是的,您可以进行分割并应用Regx,但寻找单行解决方案它将为您提供单行解决方案,对吗?您不需要迭代ABC3.45=ABC和3.45或A和B和C和3.45?字符串输入实际上不需要这样格式化,它可以像A12,3 m或ABC3.45或4.5 DEF等。因此字符串拆分不稳定always@JibinMathew然后把这些信息放在你的问题中,因为它完全改变了问题和解决方案。你只想要数字吗?为什么要投反对票?它回答了原来的问题。@JibinMathew你应该对原来的问题进行更清晰的编辑,例如EDIT:blah-blah
Regex splitterRx = new Regex("([a-zA-Z]*)[ ]{0,1}([\\d\\.,]+)[ ]{0,1}([a-zA-Z]*)");