Regex 在vb.net中检查listview中的每一行?

Regex 在vb.net中检查listview中的每一行?,regex,vb.net,listview,Regex,Vb.net,Listview,我的表单中有一个列表视图,列表视图中有很多项,我想检查列表视图中的每一行是否有一个特殊的字符串,如 127.0.0.1该行将被删除我尝试过这样做,这是我的代码 Dim was As Integer For Each item In ListView1.Items was = ListView1.Items.Count - 1 ListView1.SelectedIndices.Add(was) ListView1.Focus()

我的表单中有一个列表视图,列表视图中有很多项,我想检查列表视图中的每一行是否有一个特殊的字符串,如 127.0.0.1该行将被删除我尝试过这样做,这是我的代码

Dim was As Integer
    For Each item In ListView1.Items
        was = ListView1.Items.Count - 1
        ListView1.SelectedIndices.Add(was)
        ListView1.Focus()
        If ListView1.SelectedItems(0).SubItems(2).Text().Contains("127.0.0.1") Then
            Dim a As ListViewItem
            a = ListView1.SelectedItems(0)
            a.Remove()
        End If
    Next
这是listview中一行的示例

first examble :TCP#127.0.0.1:5939#127.0.0.1:54741#ESTABLISHED#3620
second example :TCP#192.168.1.5:3488#52.230.84.0:443#ESTABLISHED#3732
我将字符串拆分以将其添加到listview 我想删除您看到的第一个示例,但第二个示例我想保留它 当心线路不整洁
提前感谢

通过在for…中指定项目类型为ListViewItem,您可以从项目中公开属性

    For Each item As ListViewItem In ListView1.Items
        If item.SubItems(2).Text.Contains("127.0.0.1") Then
            item.Remove()
        End If
    Next
找到符合
If
标准的
项后,只需删除()

@玛丽 下面是基于我的答案的测试代码。在表单和按钮中添加一个包含3列的listview

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim lv As New ListViewItem
    lv.Text = "able"
    lv.SubItems.Add("baker")
    lv.SubItems.Add(":TCP#127.0.0.1# ESTABLISHED3620")
    ListView1.Items.Add(lv)

    lv = New ListViewItem
    lv.Text = "able"
    lv.SubItems.Add("baker")
    lv.SubItems.Add(":TCP#127.0.0.1# ESTABLISHED3620")
    ListView1.Items.Add(lv)

    lv = New ListViewItem
    lv.Text = "able"
    lv.SubItems.Add("baker")
    lv.SubItems.Add(":TCP#127.0.4.1:5939#127.0.4.1:54741#ESTABLISHED#3620")
    ListView1.Items.Add(lv)

    lv = New ListViewItem
    lv.Text = "able"
    lv.SubItems.Add("baker")
    lv.SubItems.Add(":TCP#127.0.0.1# ESTABLISHED3620")
    ListView1.Items.Add(lv)
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For Each itm As ListViewItem In ListView1.Items
        If itm.SubItems(2).Text.Contains("127.0.0.1") Then
            itm.Remove()
        End If
    Next
End Sub
其工作原理与IEnumerable接口的实现方式有关。我试图找到这篇文章,但这与影响本地副本有关,而不是实际的收藏


但是,在阅读了本文之后,我会说,最好还是坚持使用相反的for…循环,因为大多数循环在更改集合大小时都会失败。

如果要删除集合中的项,则不能使用for Each进行迭代。在循环之前获取计数,因为计数将随着循环的运行而更改。减去1,因为索引是从零开始的。向后迭代,因为如果向前迭代,则删除项时索引会发生更改,并且将跳过项,最终索引将超出范围

Private Sub IterateListView()
        Dim count As Integer = ListView1.Items.Count - 1
        For index = count To 0 Step -1
            If ListView1.Items(index).SubItems(2).Text.Contains("127.0.0.1") Then
                ListView1.Items(index).Remove()
            End If
        Next
 End Sub

当您将字符串添加到列表视图时,它是如何分割的
.SubItems(2)
将查看列表视图中的第三列
。SelectedItems
将仅返回当前选定的项目,而不是列表中的所有项目。也许你应该试试
.Items
集合为什么不使用item
如果item.SubItems(2).Text.包含(“127.0.0.1”),则item.remove结束If
但是,您可能需要将每个项作为Listview1.Items中的listviewitem执行
,以确保它被视为listviewitem。这应该只有5行代码,包括for-each和next-line。在for-each中迭代项目时,不能弄乱它们。使用一个用于。。。Next@Mary,我加了一个例子。我发现这适用于Listview和dataGridView,并且有一种方法可以实际使用包含字符串或对象的listbox。老兄,你是alegend,非常感谢你,它的工作非常好,你让我很高兴。^-^@Charles祝你说得对。我在这方面做了一点傻事,我得到了一个简单的列表(T)系统所期望的错误。InvalidOperationException:'集合被修改;枚举操作可能无法执行。但是ListViewItemsCollection必须是不同类型的动物。谢谢你的提醒。