RegEx replace multiple characters

Anyone familiar with RegEx replace in one batch:

Search: ä,ö,ü,©
Replace: ae,oe,ue,c

Thanks!

Better a chained replaceall

Var s As String = "ä...ö...ü...©"
s = s.ReplaceAll("ä", "ae").ReplaceAll("ö", "oe").ReplaceAll("ü", "ue").ReplaceAll("©", "c")

Thanks Rick, but the magic of RegEx is in the format of doing it in one pattern. Also I am using a textfield as input and characters like ü are complexly ignored.

“one size fits all” is a myth.

I guess you won’t find anything better than that kind of approach for this kind of job using Xojo’s regex

Unless someone knows something that I don’t, at the end you will end up with almost the same thing, only huge and probably slower.

Hi Rick, what I understood, its the opposite, RegEx is used for compact and fast like [^0-9a-zA-Z:,]+", “”

I know that, but I think that Xojo regex is not exactly equivalent.

The Xojo RegEx class seems equivalent, only issue I have is the ü kind of characters.

I’m curious… it looks like you’re trying to strip the encoding from the string. If so, have you tried just setting the encoding to ASCII or Nil using ConvertEncoding?

So, just do it… in Xojo:

let str = "ä...ö...ü...©";

const mapObj = {
  'ä': "ae",
  'ö': "oe",
  'ü': "ue",
  '©': "c"
};
str = str.replace(/(?:ä|ö|ü|©)/gi, matched => mapObj[matched]);

Xojo has

regex.Replace(stringToGetReplacements As String) As String

Maybe you could make a Feature Request to get another signature:

regex.Replace(stringToGetReplacements As String, match As RegExReplaceFunction) As String

Public Delegate Function RegExReplaceFunction(match As String) As String

Xojo makes it simple:

Var re As New RegEx
var newText as String

re.SearchPattern = ComboBoxRegEx.Text
re.ReplacementPattern = TextFieldRegExReplace.Text

newText = re.Replace(s)

My problem is the ü kind of characters, they are ignored…

It does just ONE of your list of chars to be replaced each turn as ReplaceAll

You are building a huge and costly ReplaceAll.

This will enable building what you want

replaceAll is a standard RegEx option

re.Options.ReplaceAllMatches=Preferences.RegExReplaceAll

Here it simply does not work. I. think the ü issue in RegEx is connected to macOS. [Edit: not true, it does work, but not in a more complex code setting…]

Wrong: Rich two lines example works fine here with Xojo 2021r2.1 / Ventura 13.1…

You are right, I just changed my post about it.

The stripped code indeed works fine, but this does not, were s as string:

Var re As New RegEx

re.SearchPattern = ComboBoxRegEx.Text
re.ReplacementPattern = TextFieldRegExReplace.Text

re.Options.CaseSensitive=Preferences.RegExCase
re.Options.Greedy=Preferences.RegExGreedy
re.Options.ReplaceAllMatches=Preferences.RegExReplaceAll

Try
  s = re.Replace(s)
  RoundRectangleRegEx.Visible=False
Catch err As  OutOfBoundsException
  RoundRectangleRegEx.Visible=True
Catch err As  RegExSearchPatternException
  RoundRectangleRegEx.Visible=True
end Try

Return s
Function removeAccents(inputString As String) As String
    Dim outputString As String = inputString
    Dim accentMapping() As String = {"À", "A", "Á", "A", "Â", "A", "Ã", "A", "Ä", "A", "Å", "A", "à", "a", "á", "a", "â", "a", "ã", "a", "ä", "a", "å", "a", "È", "E", "É", "E", "Ê", "E", "Ë", "E", "è", "e", "é", "e", "ê", "e", "ë", "e", "Ì", "I", "Í", "I", "Î", "I", "Ï", "I", "ì", "i", "í", "i", "î", "i", "ï", "i", "Ò", "O", "Ó", "O", "Ô", "O", "Õ", "O", "Ö", "O", "Ø", "O", "ò", "o", "ó", "o", "ô", "o", "õ", "o", "ö", "o", "ø", "o", "Ù", "U", "Ú", "U", "Û", "U"}
    For i As Integer = 0 To accentMapping.Ubound Step 2
        outputString = outputString.Replace(accentMapping(i), accentMapping(i+1))
    Next
    Return outputString
End Function

It does not works, bur for other reasons…
image

I my app these element do exist :slight_smile: