检查行是否与regex匹配
我有一个由服务器生成的文件-我无法控制该文件的生成或格式。我需要检查每一行以设置长度的字符串开始(在本例中为21个数字字符)。如果一行与该条件不匹配,我需要将其连接到前一行,并在读取和更正整个文件后保存它。我正在为目录中的许多文件执行此操作 到目前为止,我已经:检查行是否与regex匹配,regex,vb.net,io,Regex,Vb.net,Io,我有一个由服务器生成的文件-我无法控制该文件的生成或格式。我需要检查每一行以设置长度的字符串开始(在本例中为21个数字字符)。如果一行与该条件不匹配,我需要将其连接到前一行,并在读取和更正整个文件后保存它。我正在为目录中的许多文件执行此操作 到目前为止,我已经: Dim rgx As New Regex("^[0-9]{21}$") Dim linesList As New List(Of String)(File.ReadAllLines(finfo.FullN
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语句来循环源目录中的所有文件,这很好
希望这篇文章读起来不会太糟糕:///p>我认为您的解决方案不太好,您在连接行时失败了。这里有一种不同的方法:
Dim rgx As New Regex("^[0-9]{21}")
Dim linesList As New List(Of String)(File.ReadAllLines(finfo.FullName))
' We will create a new list to store the new lines data
Dim newLinesList As New List(Of String)()
If linesList(0).Contains("BlackBerry Messenger") Then
Dim i As Integer = 1
Dim newLine As String
While i < linesList.Count
newLine = linesList(i)
i += 1
' Keep going until the "real" line is over
While i < linesList.Count AndAlso Not rgx.IsMatch(linesList(i))
newLine += linesList(i)
i += 1
End While
newLinesList.Add(newLine)
End While
End If
File.WriteAllLines(finfo.FullName, newLinesList.ToArray())
Dim rgx作为新的正则表达式(“^[0-9]{21}”)
Dim LINES作为新列表列出(字符串)(File.ReadAllLines(finfo.FullName))
'我们将创建一个新列表来存储新行数据
Dim newlines作为新列表列出(字符串)()
如果linesList(0).包含(“BlackBerry Messenger”),则
尺寸i为整数=1
将换行符变暗为字符串
当我在名单上时,数一数
换行符=行列表(i)
i+=1
继续,直到“真正的”线结束
而i
您需要检查每一行是否以21位数字开头,但您将正则表达式锚定到了结尾——为什么?不,不应该有“$”…漫漫长夜!非常感谢。在rgx.IsMatch(i.ToString)
上,它永远不会匹配,因为i
是循环变量,Integer
。我假设你的意思是rgx.IsMatch(linesList(I))
?是的,你是对的。虽然循环作为rgx.IsMatch(linesList(i))工作,但我似乎还不能管理其余的循环。您应该发布一个数据文件的示例。所有的行都应该是21个数字字符,还是有些行根本不匹配,而不是因为它们被分割成两个连续的行?回答很好,我知道我完全错了……谢谢!