[Off Topic] "Sonderzeichen bei der Suche ignorieren"
Moderators: Hacker, Stefan2, white
[Off Topic] "Sonderzeichen bei der Suche ignorieren"
Ich nehme mir immer wieder vor mich mit "Reguläre Ausdrücke" zu beschäftigen. Was zu meiner Schande immer noch nicht geschehen ist.
Kann mir mal jemand auf die Sprünge helfen? Wie kann ich bei der Suche bestimmte Sonderzeichen ignorieren?
Beispiel:
Suche alle Texte "Speichern" wobei an beliebiger Stelle ein "&" stehen kann.
Lösungsansatz:
Entweder ignoriert man bei der Suche das Sonderzeichen "&" oder das Sonderzeichen "&" kann an jeder Stelle des Wortes vorkommen.
Kann mir mal jemand auf die Sprünge helfen? Wie kann ich bei der Suche bestimmte Sonderzeichen ignorieren?
Beispiel:
Suche alle Texte "Speichern" wobei an beliebiger Stelle ein "&" stehen kann.
Lösungsansatz:
Entweder ignoriert man bei der Suche das Sonderzeichen "&" oder das Sonderzeichen "&" kann an jeder Stelle des Wortes vorkommen.
Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"
Wo? Wie? Was? suchst du denn?
Mit dem TC?
Nach Dateinamen?
Nach Dateien mit Inhalt xyz?
Mit dem TC?
Nach Dateinamen?
Nach Dateien mit Inhalt xyz?
Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"
Entschuldige, ich dachte es macht keinen Unterschied.
Im Grunde benötige ich die Hilfe bei der Suche für meinen Texteditor EmEditor. Dieser unterstützt wie der TC bei der Suche "Reguläre Ausdrücke".
Ich möchte die *.lng-Datei Editieren, dabei stören bei der Textsuche immer wieder Sonderzeichen wie "&, %,$,\n,\r,\t,..."
Beispiel für mein Problem:
Suche alle Texte "Speichern" wobei an beliebiger Stelle ein "&" stehen kann. Es soll bspw. beide Texte "Speic&hern" und "S&peichern" gefunden werden.
Im Grunde benötige ich die Hilfe bei der Suche für meinen Texteditor EmEditor. Dieser unterstützt wie der TC bei der Suche "Reguläre Ausdrücke".
Ich möchte die *.lng-Datei Editieren, dabei stören bei der Textsuche immer wieder Sonderzeichen wie "&, %,$,\n,\r,\t,..."
Beispiel für mein Problem:
Suche alle Texte "Speichern" wobei an beliebiger Stelle ein "&" stehen kann. Es soll bspw. beide Texte "Speic&hern" und "S&peichern" gefunden werden.
-
- Senior Member
- Posts: 415
- Joined: 2005-05-24, 10:41 UTC
- Location: Wien
Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"
Puh, das dürfte bei der Eingabe mühsam sein. Etwas besseres als
s&?p&?e&?i&?c&?h&?e%?r&?n
fällt mir nicht ein, wenn mehrere verschiedene Sonderzeichen ignoriert werden sollen, wird es noch mühsamer.
Die Eingabe kannst du dir allerdings mit Hife von AHK vereinfachen, indem du den String "&?" (oder gar "[&%\$\n\r\t]?" zu einem Hotkey machst, den du dann nach jedem Buchstaben mit nur einem Tastendruck in den Regex-Suchstring einfügst.
s&?p&?e&?i&?c&?h&?e%?r&?n
fällt mir nicht ein, wenn mehrere verschiedene Sonderzeichen ignoriert werden sollen, wird es noch mühsamer.
Die Eingabe kannst du dir allerdings mit Hife von AHK vereinfachen, indem du den String "&?" (oder gar "[&%\$\n\r\t]?" zu einem Hotkey machst, den du dann nach jedem Buchstaben mit nur einem Tastendruck in den Regex-Suchstring einfügst.
Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"
2phantom
"Reguläre Ausdrücke" sind kein Standard, sondern nur eine allgemeine Beschreibung einer Funktion.
Es existieren verschiedene Engines und teilweise auch (über Jahre) mehrere Versionen dieser Implementierungen.
Jedes Programm kann die Unterstützung von "Reguläre Ausdrücke" in unterschiedlicher Art einbauen.
Total Commander verwendet die freie Delphi-Bibliothek TRegExpr von Andrey V. Sorokin:
viewtopic.php?p=323986#p323986
EmEditor verwendet Boost.Regex und inzwischen auch Onigmo:
https://www.emeditor.com/text-editor-features/history/new-in-version-15-7/#new_regular_exp_engine
Von daher ist es sehr interessant zu wissen, worum es genau geht,... sonst fängt man zweimal an...
- - -
Franz Müllers' Ausdruck ist für dein Anliegen tatsächlich passend: &?s&?p&?e&?i&?c&?h&?e&?r&?n
&? bedeutet hier,... ehem,... damit ich mir keinen Text ausdenken muss, hier die Beschreibung von AutoHotkey:
https://ahkde.github.io/docs/misc/RegEx-QuickRef.htm
Ein Platzhalter, der überprüft, ob das vorherige Element (Zeichen, Klasse oder Teilsuchmuster) vorkommt oder nicht.
Oder auch: "Das voranstehende Element ist optional". (Einmal oder Keinmal)
Zum Beispiel würde colou?r sowohl mit color als auch mit colour übereinstimmen, weil das "u" optional gemacht wurde.
(An anderer Stelle, bei anderer Verwendung, hat das ?-Fragezeichen auch mal eine ganz andere Bedeutung)
Da das mnemonik (& für unterstrichener Buchstabe) meistens weit vorne im Wort eingebaut wird,
suche ich bei so etwas gerne nach dem Wortende: chern ; ok, man muss halt ein paar mal F3 drücken
Um dir ein solches Suchmuster zu erstellen, nimm eine leere Seite im EmEditor, schreibe deinen Suchtext:
Speichern
und Suche&Ersetze
Suche: (.)
Ersetze: &?$1
[x] RegEx
[Alles Ersetzen]
&?S&?p&?e&?i&?c&?h&?e&?r&?n
- - -
Eventuell hilft dir auch ein Trick17:
- kopiere den Text / die Datei
- entferne alle Sonderzeichen (suche&ersetze)
- suche dort deinen Begriff und merke dir die Zeile
- gehe dann im original Text zu eben dieser Zeile (Strg+G)
"Reguläre Ausdrücke" sind kein Standard, sondern nur eine allgemeine Beschreibung einer Funktion.
Es existieren verschiedene Engines und teilweise auch (über Jahre) mehrere Versionen dieser Implementierungen.
Jedes Programm kann die Unterstützung von "Reguläre Ausdrücke" in unterschiedlicher Art einbauen.
Total Commander verwendet die freie Delphi-Bibliothek TRegExpr von Andrey V. Sorokin:
viewtopic.php?p=323986#p323986
EmEditor verwendet Boost.Regex und inzwischen auch Onigmo:
https://www.emeditor.com/text-editor-features/history/new-in-version-15-7/#new_regular_exp_engine
Von daher ist es sehr interessant zu wissen, worum es genau geht,... sonst fängt man zweimal an...
- - -
Franz Müllers' Ausdruck ist für dein Anliegen tatsächlich passend: &?s&?p&?e&?i&?c&?h&?e&?r&?n

&? bedeutet hier,... ehem,... damit ich mir keinen Text ausdenken muss, hier die Beschreibung von AutoHotkey:
https://ahkde.github.io/docs/misc/RegEx-QuickRef.htm
Ein Platzhalter, der überprüft, ob das vorherige Element (Zeichen, Klasse oder Teilsuchmuster) vorkommt oder nicht.
Oder auch: "Das voranstehende Element ist optional". (Einmal oder Keinmal)
Zum Beispiel würde colou?r sowohl mit color als auch mit colour übereinstimmen, weil das "u" optional gemacht wurde.
(An anderer Stelle, bei anderer Verwendung, hat das ?-Fragezeichen auch mal eine ganz andere Bedeutung)
Da das mnemonik (& für unterstrichener Buchstabe) meistens weit vorne im Wort eingebaut wird,
suche ich bei so etwas gerne nach dem Wortende: chern ; ok, man muss halt ein paar mal F3 drücken

Um dir ein solches Suchmuster zu erstellen, nimm eine leere Seite im EmEditor, schreibe deinen Suchtext:
Speichern
und Suche&Ersetze
Suche: (.)
Ersetze: &?$1
[x] RegEx
[Alles Ersetzen]
&?S&?p&?e&?i&?c&?h&?e&?r&?n
- - -
Eventuell hilft dir auch ein Trick17:
- kopiere den Text / die Datei
- entferne alle Sonderzeichen (suche&ersetze)
- suche dort deinen Begriff und merke dir die Zeile
- gehe dann im original Text zu eben dieser Zeile (Strg+G)
Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"
Danke euch beiden. So richtig praktikabel ist das dann doch nicht. Die genannten Tricks verwende ich natürlich auch immer. Ich meine, ich hätte mich schon mal damit beschäftigt und einen Editor gefunden der in der Lage war Zeichen wie "&" für die unterstrichenden Buchstaben bei der Suche zu ignorieren.
EmEditor VBS Macro: Sonderzeichen bei der Suche ignorieren
Du kannst den EmEditor an deine Bedürfnisse anpassen.phantom wrote: 2019-02-14, 09:19 UTC Danke euch beiden. So richtig praktikabel ist das dann doch nicht. Die genannten Tricks verwende ich natürlich auch immer. Ich meine, ich hätte mich schon mal damit beschäftigt und einen Editor gefunden der in der Lage war Zeichen wie "&" für die unterstrichenden Buchstaben bei der Suche zu ignorieren.
Hier ist ein Skript, welches deine Suchbefehl abarbeitet, und dabei spezielle Markierungssymbole ignoriert.
Diese Symbole musst du im Skript in der "CleanLine" Funktion noch entsprechend anpassen.
Dieses Skript (hier Macro genannt) kannst du
- entweder im Snippet-Plugin als Macro speichern, und gleich mal das Tastaturkürzel Strg+Umschalt+Alt+F zuweisen,
- oder als xxx.vbee Textdatei im EmEditor (macro?) -Ordner speichern, als "MyMacro" definieren und
über "Tools > Properties for >>>>> Keyboard >> Category: My Macros >> Commands: xxx.vbee" einen Tastaturkürzel zuweisen.
Code: Select all
#language = "VBScript"
'//VBScript macro for EmEditor
'//Stefan, v001, 2019-02-14
'//https://ghisler.ch/board/viewtopic.php?p=351583#p351583
'//Purpose: search a plain string, even if the real text contains special markup sign(s).
'//Example: find the word "Save", even if text reads "&Save" or "S&ave" or "Sa&ve" or...
'//User Settings: adjust the replace() command in CleanLine-function to your needs.
'=========================================================
' prompt for search string
strDefault = editor.GetProfileString( eeRegEmEditorUsers, "SearchAndGo", "searchStr", "was du suchen?")
searchStr = prompt("Search String", strDefault)
If searchStr = "" Then Quit
editor.WriteProfileString eeRegEmEditorUsers, "SearchAndGo", "searchStr", searchStr
'
' get active line pos and call search function
CurrentLine = document.selection.GetActivePointY(eePosLogical)
CurrentColumn = document.selection.GetActivePointX(eePosLogical)
Result = SearchAndGo(CurrentLine, CurrentColumn+Len(searchStr))
If Not (Result) Then SearchAndGo 1,1
Quit
'
Function SearchAndGo(iStartLine,iStartColumn)
For yLine = iStartLine to document.GetLines()
LineText = document.GetLine(yLine, eeGetLineWithNewLines)
SearchText = CleanLine(LineText)
xColumnPos=InStr(iStartColumn, SearchText, searchStr, 1)
If (xColumnPos) then
document.selection.SetActivePoint eePosLogical, xColumnPos, yLine, false
SearchAndGo = True
Exit For
End If
iStartColumn=1
Next
End Function 'SearchAndGo
'
Function CleanLine(strInput)
'//Search and replace signs (like '&') in strInput/LineText string temporally
'// to not disturb e.g. the search for "Save", and so even find "&Save" or "S&ave" or "Sa&ve" or... too.
'//Adjust the "CleanLine = replace()" lines to your needs, or add additional one.
'//CleanLine = replace(CleanLine,"findme1","replacewith")
'//CleanLine = replace(CleanLine,"findme2","") '<< remove 'findme2'
CleanLine = strInput
CleanLine = replace(CleanLine,"&","")
'CleanLine = replace(CleanLine,"X","")
'CleanLine = replace(CleanLine,"Y","")
'//alert(strInput & vbLF & CleanLine)
End Function 'CleanLine
'
Falls Bedarf an weiteren Details besteht, bitte melden.
HTH?

Re: [Off Topic] "Sonderzeichen bei der Suche ignorieren"
Ich nutze zwar sehr häufig den EmEditor, zumindest einmal am Tag, aber mit Snippet und Macros kenne ich mich nicht aus.
Aber als ich dann was du suchen?
gesehen habe, wußte ich was mit "CleanLine" gemeint ist und dass ich irgend etwas richtig gemacht haben muss. Das Macro oder Snippet, wo ist da der Unterschied?, ist noch etwas ausbaufähig. Funktioniert zum Teil schon mal. Seltsamerweise wird auch " speichern" mit einem Leerzeichen gefunden.
Wünschenswert wäre auch etwas mehr kompfort wie F3 für weitersuchen und Treffer farbig hervorheben. Aber sonst ganz großartig, dass du in der Lage bist mal eben so ein Script zu schreiben.
\\Edit
Folgendes konnte ich beobachten:
- befindet sich das "&"-Zeichen weder vor dem noch innerhalb des gesuchtem Textes, springt der Cursor ein Leerzeichen vor dem gesuchten Text.
- kommt in einer Zeile gar kein "&" vor, wird der gefundene Text richtig markiert (Cursor markiert den Wortanfang)
-> oder anders Ausgedrückt: kommt das "&"-Zeichen in einer Zeile an einer anderen Stelle als dem gesuchten Text vor, wird das Leerzeichen vor dem Treffer markiert
Aber als ich dann was du suchen?

Wünschenswert wäre auch etwas mehr kompfort wie F3 für weitersuchen und Treffer farbig hervorheben. Aber sonst ganz großartig, dass du in der Lage bist mal eben so ein Script zu schreiben.
\\Edit
Folgendes konnte ich beobachten:
- befindet sich das "&"-Zeichen weder vor dem noch innerhalb des gesuchtem Textes, springt der Cursor ein Leerzeichen vor dem gesuchten Text.
- kommt in einer Zeile gar kein "&" vor, wird der gefundene Text richtig markiert (Cursor markiert den Wortanfang)
-> oder anders Ausgedrückt: kommt das "&"-Zeichen in einer Zeile an einer anderen Stelle als dem gesuchten Text vor, wird das Leerzeichen vor dem Treffer markiert