C#Regex拆分了两个变量字

时间:2013-02-27 17:36:24

标签: c# regex parsing

我在使用正则表达式分割文本文件的两个部分时遇到问题。基本上,将出现一个类的名称,但随后房间号将在它之后出现一个空格。我不保证房间的名称,否则我会分开。

为了说明这一点,分裂完全正确:

WEB SITE DEVELOPMENT II     NKM 104

由于白色空格会分裂,因此在我的string []数组中它看起来像:

0 - WEB SITE DEVELOPMENT II
1 - KNM 104

这就是我需要的。问题在于以下条目:

PERSONAL COMPUTER APPLICATI NKM 106
PORTFOLIO DES & PROF PRACTI LCN 104

将显示为:

0 - PERSONAL COMPUTER APPLICATI NKM 104
1 - PORTFOLIO DES & PROF PRACTI LCN 104

当我需要时:

0 - PERSONAL COMPUTER APPLICATI
1 - KNM 104
2 - PORTFOLIO DES & PROF PRACTI 
3 - LCN 104

在这样的情况下,有关在某些正则表达式上从哪里开始的任何想法?我知道我保证房间号码永远是“XYZ 012”表格,但问题是它出现在班级名称之后。在此之前,我可以很容易地分开。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:2)

这里不需要正则表达式......

var firstPart = line.Substring(0, line.Length - 8);
var lastPart = line.Substring(line.Length - 7);

......以及完整的例子:

var data = lines.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
                .SelectMany(line => new[] {line.Substring(0, line.Length - 8), line.Substring(line.Length - 7)})
                .Select((part, i) => string.Format("{0} - {1}", i, part));

var asString = string.Join(Environment.NewLine, data);

答案 1 :(得分:2)

您的示例中的不同文本都被截断为相同的长度,这使我怀疑您的文本文件是固定宽度的,并且不需要正则表达式。 FileHelpers项目解析固定宽度的文本。

但是,如果每个文件的宽度始终相同,则只需使用string field = inputLine.Substring(startcolumn, columnLength)等表达式提取子字符串。

答案 2 :(得分:0)

这是我要使用的正则表达式选项(假设你一次只读一行:

Regex regexObj = new Regex(@"^(.+)\s(\w+\s[0-9]{3})$");

您可以通过捕获组访问它。第一个捕获组将为您提供字符串的第一部分,第二个将获取房间号并构建(?)。

假设:

  • 房间号码是最后一行
  • 您正在逐行阅读此文本文件,因此当您与字符串匹配时,其中只有一个条目。