Faalamva Posted February 18, 2013 Share Posted February 18, 2013 (edited) Hello,Could you please tell me what's wrong in the following instruction :$Output = StringRegExpReplace($Input, "[àâäçéèêëîïñôöùûüÀÂÄÇÉÈÊËÎÏÑÔÖÙÛÜ]", "[aaaceeeeiinoouuuAAACEEEEIINOOUUU]")I thought it would replace each character one by one, like the following sed command :sed "y/[àâäçéèêëîïñôöùûüÀÂÄÇÉÈÊËÎÏÑÔÖÙÛÜ]/[aaaceeeeiinoouuuAAACEEEEIINOOUUU]/" Input.txt > Output.txtBut apparently, the destination regexp is taken as a whole.For example, I get :Déjà -> D[aaaceeeeiinoouuuAAACEEEEIINOOUUU]j[aaaceeeeiinoouuuAAACEEEEIINOOUUU]instead of :Déjà -> DejaIs there a simple command for multiple regexp vs. regexp replacement ?If no, I'll do some kind of loop to replace each characters one by one.Cheers ! Edited February 18, 2013 by Faalamva Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 18, 2013 Moderators Share Posted February 18, 2013 Faalamva,I believe you will need to run an SRER for each replacement letter - you can obviously group the letters to be replaced. I would also suggest a 2D array to hold the pattern strings and replacement letter - like this: Global $aList[2][2] = [["[àâä]", "a"], ["[éèêë]", "e"]] ; obviously you include all of the possibilities $sText = "Déjà" For $i = 0 To UBound($aList) - 1 $sText = StringRegExpReplace($sText, $aList[$i][0], $aList[$i][1]) Next MsgBox(0, "Result", $sText)Note that you can use a simple StringReplace for a single letter (c and n) - but if you using a loop it might be just as quick to run an regex on everything. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
PhoenixXL Posted February 18, 2013 Share Posted February 18, 2013 You can even check the Local $String = 'Déjà' Local $Replaced While 1 $Replaced = RegExBackRef($String, '(.*?)([àâäéèêë])(.*)', '\2', "ReplaceFunc") If $Replaced = -1 Or @error Then ExitLoop $String = $Replaced WEnd MsgBox(64, 'Test', $String) Func ReplaceFunc($sMatch) Switch $sMatch Case "é","è","ê","ë" Return "e" Case "à","â","ä" Return "a" EndSwitch EndFunc ;==>ReplaceFuncAdded this as the third exampleRegards My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression. Link to comment Share on other sites More sharing options...
Faalamva Posted February 18, 2013 Author Share Posted February 18, 2013 (edited) Melba23, that's pretty much what I have done, in a more elegant way, thank you ! PhoenixXL, thank you also for your example, though it looks a bit less straightforward. Edited February 18, 2013 by Faalamva Link to comment Share on other sites More sharing options...
AZJIO Posted February 18, 2013 Share Posted February 18, 2013 $sText = 'DDDDDDDDeeeeeeeejjjjjjjaaaaaa' $sText = StringRegExpReplace($sText, '(.)\1+', '\1') MsgBox(0, 'Yes?', $sText) My other projects or all Link to comment Share on other sites More sharing options...
Faalamva Posted February 18, 2013 Author Share Posted February 18, 2013 Azjio, it doesn't answer this topic's problem, but by a funny twist of fate, your code will help me for another problem that will soon emerge : reduce all multiple consecutive characters. So, thank you too ! Link to comment Share on other sites More sharing options...
czardas Posted February 19, 2013 Share Posted February 19, 2013 This is something I considered myself recently. It might be of use.When making multiple string replacements within a single string, longer strings should generally be replaced first to avoid erroneously replacing substrings within subsequent search patterns. For this we need to sort the search patterns by length (in descending order). operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now