此文本需要像下面的图像一样被拆分。我尝试使用正则表达式,但没有得到很好的结果:
ص6:9؛17:1؛24:40؛2مل20:3؛مز128:1؛مي6:8؛؛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但是结果并不像我想要的那样。
发布于 2020-02-20 01:23:52
这个函数可以帮助我获得正确的结果。所以如果有人需要它
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 Functionhttps://stackoverflow.com/questions/60267591
复制相似问题