Как изменить мой код, чтобы разделить предоставленный текст? - PullRequest
0 голосов
/ 17 февраля 2020

Этот текст должен быть разбит, как на картинке ниже. Я пытался использовать регулярные выражения, но не получил очень хороший результат:

ص 6: 9 ؛ 17: 1 ؛ 24: 40 ؛ 2 مل 20: 3 ز زز 128: 1 ؛ مي 6: 8 ؛ ملا 2:> 6

Результат должен быть таким:

ص 6: 9 * ص - 6 - 9
17: 1 * ص - 17 - 1
24: 40 * ص - 24 - 40
2 раз 20: 3 * 2 раз - 20 - 3
раз 128: 1 * раз - 128 - 1
раз 6: 8 * مي - 6 - 8
ملا 2: 6 * ملا - 2 - 6

Результат получен из этой строки

ص 6: 9 * ص - 6 - 9
17: 1 * - 17 - 1
24: 40 * - 24 - 40
2 от 20: 3 * до - 220 - 3
от 128: 1 * مز - 128 - 1
مي 6: 8 * مي - 6 - 8
ملا 2: 6 * ملا - 2 - 6

Этот код, который я использовал и отредактируйте его несколько раз

 Public Function SplitVerseCrossRefrence(Numbers As String, InputString As String) As String
    'RR = 0
    Dim Result As String = ""
    Dim OldBookId As String = ""
    Dim MyStr As New StringBuilder
    Dim WordList As New List(Of String)
    '
    Dim forbdin() As Char = {":", "-", ";", "،", "؛"}
    '
    Try
        If InputString.IndexOf("؛") > -1 Then
            WordList.AddRange(InputString.Split("؛").ToList())
        Else
            WordList.Add(InputString)
        End If
        '
        Result = "" 
        '
        For Each Word In WordList
            '
            Dim strArray As Char() = Word.ToCharArray
            '
            For xxx As Integer = 0 To strArray.Count - 1
                '
                Dim CleanText = strArray(xxx)
                '
                If IsNumeric(CleanText) = False Then
                    MyStr.Append(CleanText)
                Else
                    If MyStr.Length = 0 Then
                        MyStr.Append(CleanText)
                    End If
                End If
                '
            Next

            Dim MyItem As String = MyStr.ToString.Trim
            '
            For ss As Integer = 0 To forbdin.Count - 1
                MyItem = MyItem.Replace(forbdin(ss).ToString.Trim, String.Empty).Trim
            Next
            '
            If IsNumeric(MyItem.Trim) = False Or MyItem.Trim <> "" Then
                OldBookId = MyItem
            Else
                MyItem = OldBookId
            End If

            If MyItem.Length >= 2 Then
                OldBookId = MyItem
            Else
                MyItem = OldBookId
            End If
            '
            Dim MyChapter As New StringBuilder
            Dim ChapterArry() = Word.Split(":")(0).Trim.ToArray

            For xx As Integer = 0 To ChapterArry.Count - 1
                If xx >= 0 Then
                    If IsNumeric(ChapterArry(xx)) = True Then
                        MyChapter.Append(ChapterArry(xx))
                    End If
                End If
            Next
            '
            Dim VersesCheck = Word.Split(":")(1).Trim
            Dim VersesFrom, VersesTo
            '
            If VersesCheck.Contains("-") = True Then
                VersesFrom = VersesCheck.Split("-")(0)
                VersesTo = VersesCheck.Split("-")(1)
            ElseIf VersesCheck.Contains("،") = True Then
                VersesFrom = VersesCheck.Split("،")(0)
                VersesTo = VersesCheck.Split("،")(1)
            Else
                VersesFrom = VersesCheck
                VersesTo = 0
            End If
            '
            If MyItem = "ص" Then
                MyItem = Numbers.Split(".")(0)
            End If
            '
            Result = Result & Word & " * " & MyItem & " - " & MyChapter.ToString & " - " & VersesFrom & "<br />" & vbCrLf
            MyStr.Clear()
        Next
    Catch ex As Exception
        Result = InputString
    End Try
    Return Result
End Function

Но результат не так, как мне нужно.

1 Ответ

0 голосов
/ 19 февраля 2020

Эта функция помогает мне получить правильный результат. так что если кому-то это нужно

 Public Function SplitText(InputString As String) As String
    Dim Result As String = ""
    Dim OldBookId As String = ""
    Dim MyStr As New StringBuilder
    Dim MyChapter As New StringBuilder
    Dim WordList As New List(Of String)
    '
    Try
        '
        If InputString.IndexOf("؛") > -1 Then
            WordList.AddRange(InputString.Split("؛").ToList())
        Else
            WordList.Add(InputString)
        End If
        '
        Result = "" '"( "

        For Each Word In WordList

            Dim IsCheck As Boolean = False
            Dim A() As String = Word.Split(":")
            Dim AName As String = A(0).Trim
            Dim RevAName As String = StrReverse(AName)
            Dim strArray() As Char = RevAName.ToArray
            '
            For xxx As Integer = 0 To UBound(strArray)
                '
                'txtLog.AppendText(AscW(strArray(xxx)) & vbCrLf)
                '
                If AscW(strArray(xxx)) <> 8207 Then
                    If IsNumeric(strArray(xxx)) = True And IsCheck = False Then
                        'strArray.RemoveAt(xxx)
                        MyChapter.Append(strArray(xxx))
                    Else
                        IsCheck = True
                        MyStr.Append(strArray(xxx))
                    End If
                End If
                '
            Next
            '
            Dim MyItem As String = StrReverse(MyStr.ToString.Trim)
            '
            If MyItem <> "" Then
                OldBookId = MyItem
            Else
                MyItem = OldBookId
            End If
            '
            Dim VersesCheck = A(1)
            Dim VersesFrom, VersesTo
            '
            If VersesCheck.Contains("-") = True Then
                VersesFrom = VersesCheck.Split("-")(0)
                VersesTo = VersesCheck.Split("-")(1)
            ElseIf VersesCheck.Contains("،") = True Then
                VersesFrom = VersesCheck.Split("،")(0)
                VersesTo = VersesCheck.Split("،")(1)
            Else
                VersesFrom = VersesCheck
                VersesTo = 0
            End If
            '
            Result = Result & Word & " * " & MyItem & " - " & StrReverse(MyChapter.ToString) & " - " & VersesFrom & " - " & VersesTo & vbCrLf

            MyChapter.Clear()
            MyStr.Clear()
            IsCheck = False
            '
        Next

    Catch ex As Exception
        Result = InputString
    End Try
    '
    Return Result
    '
End Function
...