You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中处理跨多行字符串:合并数字值间文本到行尾

解决字符串跨多行的块截断问题

我来帮你搞定这个字符串处理的需求!首先咱们先明确下核心目标:

输入是一段可能跨多行的字符串,结构是多个数字|IP|文本的块连在一起,需要去掉最后一个块,把前面的所有块内容拼接起来作为输出。

比如你给的示例:

  • 输入:567899|190.78.9|xmp xmyz lpz dwx 765423|195.9.0|nnox wertx wz 89021|199.6.7|xxz
  • 期望输出:567899|190.78.9|xmp xmyz lpz dwx 765423|195.9.0|nnox wertx wz

你之前的代码只处理数字开头的行,丢了中间的文本,问题出在按行分割处理——因为文本可能和数字在同一行,甚至跨多行,所以必须把整个输入当成一个完整的字符串来处理。

解决方案(C#)

这里提供两种实用的实现方式:

方法1:正则捕获所有有效块

通过正则表达式匹配所有完整的数字|IP|文本块(直到下一个数字块开始),然后拼接这些块:

using System;
using System.IO;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        // 读取整个文件内容,合并多行成一个字符串(去掉换行符)
        string input = File.ReadAllText("your_input_file.txt").Replace(Environment.NewLine, "");
        
        // 正则匹配:每个块以数字+|开头,直到下一个数字+|出现
        var blockMatches = Regex.Matches(input, @"(\d+\|.*?)(?=\d+\|)");
        
        string result = string.Empty;
        foreach (Match match in blockMatches)
        {
            result += match.Value;
        }
        
        // 去掉末尾可能的多余空格
        result = result.Trim();
        
        Console.WriteLine(result);
        // 也可以写入文件:File.WriteAllText("output.txt", result);
    }
}

方法2:定位最后一个块的起始位置

从右往左找到最后一个数字|的位置,直接截断到该位置之前:

using System;
using System.IO;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = File.ReadAllText("your_input_file.txt").Replace(Environment.NewLine, "");
        
        // 从右往左匹配第一个(也就是最后一个)数字+|(前面带空格,对应示例中的分隔)
        var lastBlockStart = Regex.Match(input, @"(?<=\s)\d+\|", RegexOptions.RightToLeft);
        
        if (lastBlockStart.Success)
        {
            string result = input.Substring(0, lastBlockStart.Index).Trim();
            Console.WriteLine(result);
        }
        else
        {
            // 如果没有找到多个块,直接返回原内容
            Console.WriteLine(input.Trim());
        }
    }
}

关键说明

  • 为什么不按行处理?因为你的文本部分可能和数字在同一行,或者跨多行分布,按行分割会破坏块的完整性。
  • File.ReadAllText会一次性读取整个文件内容,避免了逐行处理的局限性。
  • 正则表达式中的(?=\d+\|)是正向预查,确保我们只匹配到下一个块开始前的内容,不会包含后面的数字块。

内容的提问来源于stack exchange,提问作者adsf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:32:33