C# 如何在字符串中用空格将数字与单词、字符和任何其他标记分开

C# 如何在字符串中用空格将数字与单词、字符和任何其他标记分开,c#,string,variables,text,replace,C#,String,Variables,Text,Replace,我试图将数字与单词或字符以及任何其他带有空格的标点符号分开,并将它们写在一起,例如字符串是: string input = "ok, here is369 and777, and 20k0 10+1.any word."; 所需输出应为: ok, here is 369 and 777 , and 20 k 0 10 + 1 .any word. 我不确定我的方法是否正确,但现在我要做的是,找出字符串是否包含数字,然后用相同的值替换它,但中间有空格。如果可能的话,我如何找到所有单独的数

我试图将数字与单词或字符以及任何其他带有空格的标点符号分开,并将它们写在一起,例如字符串是:

 string input = "ok, here is369 and777, and 20k0 10+1.any word.";
所需输出应为:

 ok, here is 369 and 777 , and 20 k 0 10 + 1 .any word. 
我不确定我的方法是否正确,但现在我要做的是,找出字符串是否包含数字,然后用相同的值替换它,但中间有空格。如果可能的话,我如何找到所有单独的数字(不是数字中的每个数字更清晰),用单词或空格分隔或不分隔,并将找到的每个数字附加到值中,该值可以一次全部使用,以相同的数字替换,但两边有空格。这样,它只返回字符串中第一个出现的数字:

class Program
{
    static void Main(string[] args)
    {
        string input = "here is 369 and 777 and 15 2080 and 579"; 
        string resultString = Regex.Match(input, @"\d+").Value;

        Console.WriteLine(resultString);

        Console.ReadLine();
    }
}
输出:

369

但我也不确定我是否能得到每个替换值的所有不同的查找编号。如果我们需要的基本上是在数字周围添加空格,那么尝试以下方法:

string tmp = Regex.Replace(input, @"(?<a>[0-9])(?<b>[^0-9\s])", @"${a} ${b}");
string res = Regex.Replace(tmp,   @"(?<a>[^0-9\s])(?<b>[0-9])", @"${a} ${b}");
要以简短的方式构造所需的结果字符串,请执行以下操作:

string res = string.Join(" ", matches.Cast<Match>().Select(m => m.Groups[1].Value));
string res=string.Join(“,matches.Cast()。选择(m=>m.Groups[1].Value));

如果我们基本上需要在数字周围添加空格,请尝试以下方法:

string tmp = Regex.Replace(input, @"(?<a>[0-9])(?<b>[^0-9\s])", @"${a} ${b}");
string res = Regex.Replace(tmp,   @"(?<a>[^0-9\s])(?<b>[0-9])", @"${a} ${b}");
要以简短的方式构造所需的结果字符串,请执行以下操作:

string res = string.Join(" ", matches.Cast<Match>().Select(m => m.Groups[1].Value));
string res=string.Join(“,matches.Cast()。选择(m=>m.Groups[1].Value));

这提供了所需的输出:

string input = "ok, here is369 and777, and 20k0 10+1.any word.";
var matches = Regex.Matches(input, @"([\D]+|[0-9]+)");
foreach (Match match in matches)
    Console.Write("{0} ", match.Groups[0].Value);

[\D]将匹配任何非数字的内容。请注意{0}后面的空格。

这提供了所需的输出:

string input = "ok, here is369 and777, and 20k0 10+1.any word.";
var matches = Regex.Matches(input, @"([\D]+|[0-9]+)");
foreach (Match match in matches)
    Console.Write("{0} ", match.Groups[0].Value);

[\D]将匹配任何非数字的内容。请注意{0}后面的空格。

您的路径是正确的。Regex.Match只返回一个匹配项,您必须使用
.NextMatch()
获取与正则表达式匹配的下一个值
Regex.Matches
将所有可能的匹配项返回到
MatchCollection
中,然后您可以像我在示例中所做的那样使用循环对其进行解析:

string input = "here is 369 and 777 and 15 2080 and 579";

        foreach (Match match in Regex.Matches(input, @"\d+"))
        {
            Console.WriteLine(match.Value);
        }

        Console.ReadLine();
这将产生:

369
777
15
2080
579

你走的路是对的。Regex.Match只返回一个匹配项,您必须使用
.NextMatch()
获取与正则表达式匹配的下一个值
Regex.Matches
将所有可能的匹配项返回到
MatchCollection
中,然后您可以像我在示例中所做的那样使用循环对其进行解析:

string input = "here is 369 and 777 and 15 2080 and 579";

        foreach (Match match in Regex.Matches(input, @"\d+"))
        {
            Console.WriteLine(match.Value);
        }

        Console.ReadLine();
这将产生:

369
777
15
2080
579

print语句应该是Console.Write({0}),match.Groups[1].Value)@好奇的头脑我不想通过添加逻辑来避免结尾空格而使它变得更复杂。@inquisitive的头脑无论如何,添加了一个基于Linq的单行线。@AlexD Hello,是的,这是一个好方法,但在我的例子中,我遇到了两个问题,第一,它不仅将数字与其他事物区分开来,而且还将标点符号与单词区分开来。另一个是,因为我想把数字和所有东西分开,但同时我想把其他所有东西都保留在字符串中,用这段代码,我不知道为什么,但我在输出上丢失了“+”符号。@MDaruwalla标点符号被要求分开:
这里是369和777,还有20k0
前面有一个空格。你能提供不合格的样品吗?什么是输入,什么是期望的输出。print语句应该是Console.Write(“{0}”,match.Groups[1].Value)@好奇的头脑我不想通过添加逻辑来避免结尾空格而使它变得更复杂。@inquisitive的头脑无论如何,添加了一个基于Linq的单行线。@AlexD Hello,是的,这是一个好方法,但在我的例子中,我遇到了两个问题,第一,它不仅将数字与其他事物区分开来,而且还将标点符号与单词区分开来。另一个是,因为我想把数字和所有东西分开,但同时我想把其他所有东西都保留在字符串中,用这段代码,我不知道为什么,但我在输出上丢失了“+”符号。@MDaruwalla标点符号被要求分开:
这里是369和777,还有20k0
前面有一个空格。你能提供不合格的样品吗?什么是输入,什么是期望的输出。您好,这似乎是与上面相同的答案,这是一个很好的解决方案,但不适用于我的情况,因为它不仅将数字与其他内容区分开来,还将标点符号与单词区分开来。因为我想把数字从所有东西中分离出来,但同时我想把其他所有东西都保留在字符串中,但由于某种原因,我用这段代码在输出上丢失了“+”符号。您好,这似乎和上面的答案是一样的,这是一个很好的解决方案,但对我来说不是,因为它不仅把数字从其他东西中分离出来,还有单词的标点符号。因为我想把数字和所有的东西分开,但同时我想把其他的东西都保留在字符串中,但由于某种原因,我用这段代码在输出上丢失了“+”号。你好,是的,我似乎也能以某种方式找到答案,但上面的解决方案完全回答了我的问题Hello,是的,我似乎也能以某种方式找到答案,但上述解决方案完全回答了我的问题