VB如何从空格分隔的字符串中提取BRNumber、EnglishName、ChineseName?

问题描述 投票:0回答:1

宪报文件

我想从上述PDF文档中提取公司信息。由于公司的限制,我只能使用Uipath的ReadPDF活动来提取PDF中的文本。我已经去掉了头部和尾部,并将所有公司条目都放入了主体中。公司条目的结构如下,

BR号码 英文名称 中文名称

BRNumber可以是字母和数字的组合,长度为8。 英文名称可以是字母和特殊字符的组合。 中文名称可以是汉字和特殊字符的组合。

当英文名或中文名太长时,会被分成两行。

BR编号、英文名称、中文名称之间以空格分隔。英文名称中的单词也用空格分隔。

如何提取BRNumber、EnglishName和ChineseName?

我尝试用正则表达式分隔一行

([A-Za-z0-9\-]*)\s*(([A-Za-z0-9-'&.,\s()/]*)\s*([A-Za-z0-9-'&.,\s()/]*)\s*([A-Za-z0-9-'&.,\s()/]*))\s*([\d\u4e00-\u9fff-\s()()]*)
但是当ChineseName不是以汉字开头时,结果是错误的。

例如,

C1234567 | 20 你好有限公司 | 20 你好有限公司

将成为

C1234567 | 20 你好有限公司 20 |你好有限公司

该栏只是为了显示得更清楚。请忽略它。

regex vb.net structure uipath
1个回答
0
投票

不用正则表达式,只需使用普通的旧字符串操作...

从前面搜索第一个空格即可得到BRNumber。 从后面搜索最后一个空格即可得到中文名称。 中间的所有内容都必须是英文名称。 添加对多行字符串的额外检查以处理边缘情况。

类似:

Public Class DataValues

    Public BRNumber As String
    Public EnglishName As String
    Public ChineseName As String

    Public Shared Function GetDataValues(ByVal data As String) As DataValues
        Dim dv As New DataValues
        Dim firstSpace As Integer = data.IndexOf(" ")
        Dim lastSpace As Integer = data.LastIndexOf(" ")
        Dim newLine As Integer = data.IndexOf(Environment.NewLine)
        If newLine <> -1 AndAlso firstSpace <> -1 AndAlso firstSpace < newLine Then
            dv.BRNumber = data.Substring(0, firstSpace)
            dv.EnglishName = data.Substring(firstSpace + 1, newLine - firstSpace - 1)
            dv.ChineseName = data.Substring(newLine + Environment.NewLine.Length)
        ElseIf firstSpace <> -1 AndAlso lastSpace <> -1 AndAlso firstSpace <> lastSpace Then
            dv.BRNumber = data.Substring(0, firstSpace)
            dv.EnglishName = data.Substring(firstSpace + 1, lastSpace - firstSpace - 1)
            dv.ChineseName = data.Substring(lastSpace + 1)
        End If
        Return dv
    End Function

    Public Overrides Function ToString() As String
        Return "BRNumber: " & BRNumber & Environment.NewLine &
            "EnglishName: " & EnglishName & Environment.NewLine &
            "ChineseName: " & ChineseName & Environment.NewLine
    End Function

End Class

这是在按钮单击事件中使用的类:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim data As String = "C1234567 20 Hello Co.Ltd 20 你好有限公司"
    Dim data2 As String = "C1234567 20 Hello Co.Ltd 20" & Environment.NewLine & "你好有限公司"

    Dim dv1 As DataValues = DataValues.GetDataValues(data)
    Debug.Print(dv1.ToString())

    Dim dv2 As DataValues = DataValues.GetDataValues(data2)
    Debug.Print(dv2.ToString())
End Sub

这是 IDE 的输出:

BRNumber: C1234567
EnglishName: 20 Hello Co.Ltd 20
ChineseName: 你好有限公司

BRNumber: C1234567
EnglishName: 20 Hello Co.Ltd 20
ChineseName: 你好有限公司
© www.soinside.com 2019 - 2024. All rights reserved.