0

我在使用正则表达式拆分文本文件的两个部分时遇到问题。基本上,会出现一个班级的名称,但随后房间号会出现一个空格。我不能保证房间的名字,否则我会分裂。

为了说明,这分裂得很好:

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”形式,但问题是它出现在班级名称之后。那是以前,我可以很容易地就此分开。任何帮助表示赞赏。

4

3 回答 3

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);
于 2013-02-27T17:39:32.850 回答
2

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

但是,如果每个文件的宽度始终相同,则可以简单地使用诸如string field = inputLine.Substring(startcolumn, columnLength).

于 2013-02-27T17:46:37.503 回答
0

这是我将使用的正则表达式选项(假设您一次阅读一行:

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

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

假设:

  • 房间号是一行中的最后一件事
  • 您正在逐行读取此文本文件,因此当您与字符串匹配时,其中只有一个条目。
于 2013-02-27T17:47:15.883 回答