c# Regex拆分两个变量字

本文关键字:两个 变量 Regex 拆分 | 更新日期: 2023-09-27 18:01:21

我有一个问题拆分文本文件的两个部分与regex。基本上,会出现一个班级的名字,然后房间号会在它后面出现一个空白。我不能保证知道房间的名字,否则我就分了。

为了说明这一点,分割得很好:

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"形式,但问题是它出现在类的名称之后。这是之前的事了,我很容易就会分裂。

c# Regex拆分两个变量字

这里不需要正则表达式…

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);

事实上,你的例子中不同的文本都以相同的长度截断,这使我怀疑你的文本文件是固定宽度的,不需要正则表达式。FileHelpers项目解析固定宽度的文本。

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

等表达式提取子字符串。

以下是我将使用的正则表达式选项(假设您每次读取一行):

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

可以通过抓包组访问。第一个捕获组将获得字符串的第一部分,第二个捕获组将获得房间号和建筑(?)。

假设:

  • 房号是一行的最后一项
  • 你正在逐行读取这个文本文件,所以当你匹配一个字符串时,里面只有一个条目。