如何用字符串中的空格分隔数字与单词,字符和任何其他标记

时间:2016-10-30 01:58:37

标签: c# string variables text replace

我正在尝试将数字与单词或字符分开,并且字符串中的空格的任何其他标点符号将它们一起写入,例如字符串是:

 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

输出:

$("#file").change(function() {
  var reader = new FileReader();
  reader.readAsArrayBuffer(this.files[0]);
  var fileName = this.files[0].name;
  var fileType = this.files[0].type;
  alert(fileType)
  reader.onloadend = function() {
    var base64Image = btoa(String.fromCharCode.apply(null, new Uint8Array(this.result)));
    // I show the image now and convert the data to base 64
  }
}

但我也不确定我是否可以为每个替换值获得所有不同的找到数字。最好找出去哪个方向

3 个答案:

答案 0 :(得分:6)

如果我们需要的是基本上在数字周围添加空格,请尝试:

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 input = "here is369 and777, and 20k0";
var matches = Regex.Matches(input, @"([A-Za-z]+|[0-9]+|\p{P})");
foreach (Match match in matches)
    Console.WriteLine("{0}", match.Groups[1].Value);

以简短的方式构造所需的结果字符串:

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

答案 1 :(得分: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

答案 2 :(得分:-1)

这提供了所需的输出:

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}之后的空格。