【发布时间】:2012-12-16 08:56:24
【问题描述】:
我有一个由服务器生成的文件 - 我无法控制该文件是如何生成或格式化的。我需要检查每一行都以设定长度的字符串开头(在本例中为 21 个数字字符)。如果一行与该条件不匹配,我需要将其连接到上一行,并在读取并更正整个文件后,保存它。我正在为目录中的很多文件执行此操作。
到目前为止我有:
Dim rgx As New Regex("^[0-9]{21}$")
Dim linesList As New List(Of String)(File.ReadAllLines(finfo.FullName))
If linesList(0).Contains("BlackBerry Messenger") Then
linesList.RemoveAt(0)
For i As Integer = 0 To linesList.Count
If Not rgx.IsMatch(i.ToString) Then
linesList.Concat(linesList(i-1))
End If
Next
End If
File.WriteAllLines(finfo.FullName, linesList.ToArray())[code]
在该代码块之前和之后都有一个 for 语句来循环遍历源目录中的所有文件,它工作正常。
希望这不会太糟糕:/
【问题讨论】:
-
您需要检查每一行是否以开头有 21 位数字,但您将正则表达式锚定到末尾——为什么?
-
不,那个“$”不应该在那里......漫长的夜晚!谢谢你。剩下的还是有点卡住了。
-
在
rgx.IsMatch(i.ToString)上,它永远不会匹配,因为i是循环变量,而Integer。我假设你的意思是rgx.IsMatch(linesList(i))? -
是的,你是对的。虽然循环作为 rgx.IsMatch(linesList(i)) 工作,但我似乎还无法管理其余部分。
-
您应该发布数据文件的样本。所有行都应该是 21 个数字字符,还是你有一些根本不匹配的行,而不是因为它们被分成两个连续的行?