清除富文本框并保留某些字符串

Clear rich text box and leave certain strings

我的富文本框中有很多数据,我想做的是清除它,只留下以 AZ 开头的单词,这可能吗?我尝试了以下编码,但它失败了

String cannot be of zero length.
Parameter name: oldValue

密码是

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        Dim str As String
        str = rtbjw.Text
        If Not str.Contains("AZ") = True Then
            rtbjw.Text = rtbjw.Text.Replace("", "").Trim()
        End If
    End Sub

示例文本

AZ0034   14         AZ0034L1    ART3    LTD   0 srv01   000_00000_LTD   ECR   0  - BE   Active    -
AZ0003   10         AZ0003L1    ART3    LTD   0 srv01   000_00000_LTD   ECR   8  - BE   Active    -
AZ0008    9         AZ0008L1    ART3    LTD   0 srv01   000_00000_LTD   ECR  12  - BE   Active    -
AZ0010    8         AZ0010L1    ART3    LTD   0 srv01   000_00000_LTD   ECR   7  - BE   Active    -
AZ0009    7         AZ0009L1    ART3    LTD   0 srv01   000_00000_LTD   ECR   7  - BE   Active    -
AZ0004    2         AZ0004L1    ART3    LTD   0 srv01   000_00000_LTD   ECR   3  - BE   Active    -
AZ0006    1         AZ0006L1    ART3    NONE      - -   --- ECR   7  - BE   Active    -
AZ0007    -         AZ0007L1    ART3    NONE      - -   JO  ECR   8  - BE   Active    -

rtbjw.Text = rtbjw.Text.Replace("", "").Trim()

只会用空字符串替换在 rtjbw.Text 中找到的空字符串。我确定您注意到它实际上没有做任何事情,因为没有任何空字符串可以替换。无论如何,如果您只想保留以 "AZ" 开头的单词,那么这不是正确的方法。很少有不同的方法(包括 RegEx)会起作用。但是,我对 RegEx 不够熟悉,无法提供使用它的解决方案,但这同样有效。

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim strArr() As String = rtbjw.Text.Split(" ")
    rtbjw.Clear()
    For Each item In strArr
        If item.StartsWith("AZ") Then
            If rtbjw.Text.Length > 0 Then rtbjw.Text &= " "
            rtbjw.Text &= item
        End If
    Next
End Sub

我在这里所做的是获取 rtbjw 的内容并将其分配给一个字符串数组,用 space 拆分它。这将创建一个 "words" 的列表(假设每个单词确实由 space 分隔)。因为我们现在在文本框中有一个包含所有 "words" 的列表,所以文本框中的所有文本都被清除了。

然后,在 for 循环中,我查看单词列表中的每个项目,如果它以 "AZ" 开头(使用 StartsWith() 方法),我正在做两件事情。首先,如果文本框中的文本长度大于0,我在当前文本框中的内容中添加一个space(以分隔单词,大于0检查是为了防止添加space 作为第一个字符),然后将以 "AZ" 开头的单词添加到文本框中文本的末尾。

编辑:因为我很好奇并且正在学习如何使用它们,所以我还修改了它以使用 LINQ 查询。做的事情基本相同,但不是将文本分配给字符串数组,而是将文本存储在 queryResult 变量中。见下文。

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim queryResults As IEnumerable = From word In rtbjw.Text.Split(" ")
                                      Where word.StartsWith("AZ")
    rtbjw.Clear()
    For Each word In queryResults
        If rtbjw.TextLength > 0 Then rtbjw.Text &= " "
        rtbjw.Text &= word
    Next
End Sub