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"形式,但问题是它出现在类的名称之后。这是之前的事了,我很容易就会分裂。
这里不需要正则表达式…
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})$");
可以通过抓包组访问。第一个捕获组将获得字符串的第一部分,第二个捕获组将获得房间号和建筑(?)。
假设:
- 房号是一行的最后一项
- 你正在逐行读取这个文本文件,所以当你匹配一个字符串时,里面只有一个条目。