Imports System
Imports System.Text.RegularExpressions
Imports System.Collections.Generic
Module Module1
'---------------------------------------------------------------
' removeDuplicatesMultiDelimiterCI
'
' Removes duplicate words separated by multiple delimiters.
'
' Features:
' - Case‑insensitive comparison (using ToLowerInvariant)
' - Preserves original casing of the first occurrence
' - Trims whitespace around tokens
' - Supports ANY number of delimiters (including multi‑character)
' - Preserves original order
' - Efficient O(n) lookup using HashSet(Of String)
'
' Algorithm:
' 1. Build a regex that matches ANY delimiter.
' 2. Replace all delimiters with a single sentinel.
' 3. Split by that sentinel.
' 4. Trim each token.
' 5. Convert to lowercase for comparison.
' 6. Keep only first occurrence.
' 7. Reassemble using a chosen delimiter.
'---------------------------------------------------------------
Function RemoveDuplicatesMultiDelimiterCI(
input As String,
delimiters As List(Of String),
outputDelimiter As String
) As String
' Step 1: Build a regex that matches ANY delimiter
Dim escaped As New List(Of String)
For Each d In delimiters
escaped.Add(Regex.Escape(d))
Next
Dim pattern As String = "(" & String.Join("|", escaped) & ")"
' Step 2: Replace all delimiters with a sentinel
Dim sentinel As String = Environment.NewLine
Dim normalized As String = Regex.Replace(input, pattern, sentinel)
' Step 3: Split by sentinel
Dim tokens As String() = normalized.Split(New String() {sentinel},
StringSplitOptions.RemoveEmptyEntries)
' Step 4: Remove duplicates (case‑insensitive)
Dim seen As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)
Dim unique As New List(Of String)
For Each token In tokens
Dim trimmed As String = token.Trim()
If trimmed = "" Then Continue For
Dim key As String = trimmed.ToLowerInvariant()
If Not seen.Contains(key) Then
seen.Add(key)
unique.Add(trimmed)
End If
Next
' Step 5: Reassemble
Return String.Join(outputDelimiter, unique)
End Function
Sub Main()
Dim s As String =
"AAA | aaa , aAA * aaA | AAa | AAA | BBB | ccc ---- CCC | AAA ; aaa | bbb"
Dim delimiters As New List(Of String) From {
" ", "|", ",", "*", "-", ";"
}
Dim result As String =
RemoveDuplicatesMultiDelimiterCI(s, delimiters, " | ")
Console.WriteLine(result)
End Sub
End Module
' run:
'
' AAA | BBB | ccc
'