检查行是不是匹配正则表达式

Posted

技术标签:

【中文标题】检查行是不是匹配正则表达式【英文标题】:Check if line matches regex检查行是否匹配正则表达式 【发布时间】: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 个数字字符,还是你有一些根本不匹配的行,而不是因为它们被分成两个连续的行? 【参考方案1】:

我认为您的解决方案没有任何好处,您在连接这些行时失败了。这是另一种方法:

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

【讨论】:

很棒的答案,我确实知道我在哪里完全错了......谢谢!

以上是关于检查行是不是匹配正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

检查是不是存在与正则表达式匹配的数组键

如何检查字符串是不是与 node.js 中的任何正则表达式数组匹配?

Python:检查列表中至少一个正则表达式是不是与字符串匹配的优雅方法

正则表达式及linux文本检查工具

如何检查我的字符串是不是与正则表达式匹配 - Swift 3 [重复]

检查列表是不是有一个或多个与正则表达式匹配的字符串