我在使用正则表达式分割文本文件的两个部分时遇到问题。基本上,将出现一个类的名称,但随后房间号将在它之后出现一个空格。我不保证房间的名称,否则我会分开。
为了说明这一点,分裂完全正确:
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”表格,但问题是它出现在班级名称之后。在此之前,我可以很容易地分开。任何帮助表示赞赏。
答案 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})$");
您可以通过捕获组访问它。第一个捕获组将为您提供字符串的第一部分,第二个将获取房间号并构建(?)。
假设: