dani
Goto Top

RegEx - Klein- und Großschreibung spielt keine Rolle

Hallo zusammen,

ich brauche für ein kl. Projekt einen Regular Expression. Der Ausdruck soll prüfen, ob ein bestimmes Wort in einer Zeile vorkommt. Dabei soll die Position des Wortes in dieser Zeile, Groß- & Kleinschreibung dieses Wortes keine Rolle spielen.

Beispielzeile:
Das ist dein Strohhut
Nun ist aber das Wort Strohhut verboten - egal wie geschrieben:
Strohhut
strohhut
sTROhhut
....
Ich bring's einfach nicht auf die Reihe. face-confused


Gruss,
Dani

Content-Key: 92931

Url: https://administrator.de/contentid/92931

Printed on: April 27, 2024 at 01:04 o'clock

Mitglied: 67369
67369 Jul 25, 2008 at 13:19:57 (UTC)
Goto Top
find /i oder findstr /i benutzen. /i ignoriert die Groß-/Kleinschrift.

Wenn du das in einer Programmiersprache verwendest, vorher den String zur Prüfung umwandeln mit AnsiUppercase() oder AnsiLowercase(), ganz nach Vorliebe.
Member: bastla
bastla Jul 25, 2008 at 13:22:51 (UTC)
Goto Top
Hallo Dani!

Je nach der Software, die Du verwendest, sollte es einen "IgnoreCase"-Schalter geben - oder auch nicht. In letzterem Falle bliebe immer noch (unschön, aber effektiv):
[Ss][Tt][Rr][Oo][Hh][Hh][Uu][Tt]
Grüße
bastla
Member: Dani
Dani Jul 25, 2008 at 13:28:49 (UTC)
Goto Top
Hi BauerHick,
leider gibt es in dieser Sprache kein "find", "findstr", etc....das Modul ist fertig geliefert. Ich kann eben über eine Textdatei angeben, was gesperrt sein muss.

Die Doku dazu ist eben ziemlich schlecht! face-confused


Gruss,
Dani
Member: Dani
Dani Jul 25, 2008 at 13:29:49 (UTC)
Goto Top
Hi bastla,
hmm...sprich es würde nachher eigentlich so aussehen:
^.*[Ss][Tt][Rr][Oo][Hh][Hh][Uu][Tt].*$
"ignore" meine ich zu wissen, dass /i bei RegEx der passende Schalter ist.


Gruss,
Schakal
Member: bastla
bastla Jul 25, 2008 at 13:49:27 (UTC)
Goto Top
Hallo Dani!

Welchen Vorteil siehst Du bei Deiner Schreibweise? Da Du beliebige Zeichen vor und nach dem Suchbegriff zulässt ergibt sich daraus keine Einschränkung, und falls der Suchbegriff auf zwei (oder mehr) Zeilen verteilt wäre, sollte er durch das enthaltene Zeilenendezeichen (egal, ob Chr(10) oder Chr(13) oder beides) ohnehin nicht gefunden werden.

Wenn Du andererseits erreichen wolltest, dass der Suchbegriff nur als einzelnes Wort gefunden wird, müsstest Du ihn mit "\b" eingrenzen.

Grüße
bastla

[Edit] Wenn allerdings das Ziel ist, die gesamte Zeile als Ergebnis zu erhalten, dann sehe ich den Sinn in Deiner Version inzwischen auch. face-wink [/Edit]
Member: Dani
Dani Jul 25, 2008 at 14:50:53 (UTC)
Goto Top
Hi bastle,
oh man..was schreibe ich da nur. Ich bin total am Ende mit Nerven, Körperlich und mit der Konzentration.

Also ich möchte eigentlich nur feststellen, ob der Namen "Strohhut" in dieser Zeile vorkommt - egal, wie geschrieben und an welcher Position in der Zeile.

Ich hoffe, ich habs diesmal richtig geschrieben...face-confused


Gruss,
Dani
Member: bastla
bastla Jul 25, 2008 at 16:29:27 (UTC)
Goto Top
Hallo Dani!

... nur feststellen, ob der Namen "Strohhut" in dieser Zeile vorkommt ...
Wenn von Deiner Software zeilenweise überprüft wird, sollte mein erster Vorschlag genügen ...

Grüße
bastla
Member: Dani
Dani Jul 25, 2008 at 17:21:10 (UTC)
Goto Top
G' Abend,
funktioniert....ähm, du hast grad nicht n VBScript zur Hand wo ich das Wort eingebe kann und danach die Kombi ausgibt.


Gruss,
Dani
Member: bastla
bastla Jul 25, 2008 at 17:34:59 (UTC)
Goto Top
Hallo Dani!

Wie das Leben so spielt - grade hatte ich mir gedacht, vor dem Abendessen könnte ich doch vielleicht noch ein kleines Script ... face-wink
If WScript.Arguments.Count > 0 Then
	Wort = WScript.Arguments(0)
Else
	WScript.Echo "Bitte mit Suchwort als Parameter aufrufen!"  
	WScript.Quit
End If

Wort = UCase(Wort)

Pattern = ""  
For i = 1 To Len(Wort)
	CharU = Mid(Wort, i, 1)
	If CharU >= "A" And CharU <= "Z" Or CharU = "Ä" Or CharU = "Ö" Or CharU = "Ü" Then  
	Pattern = Pattern & "[" & CharU & LCase(CharU) & "]"  
	Else
		Pattern = Pattern & CharU
	End If
Next
WScript.Echo Pattern
Wenn Du mit
cscript "Scriptname.vbs" "strohhut"  
in der Konsole startest, wird hoffentlich etwas Vernünftiges, Kopierfähiges herauskommen ...

Mahlzeit
bastla

[Edit] Kleine Anpassung: Wenn es keine Groß-/Kleinschreibung gibt (Ziffern, etc) genügt auch die Angabe des Zeichens selbst. [/Edit]
Member: Dani
Dani Jul 25, 2008 at 18:41:38 (UTC)
Goto Top
Abend bastla,
ich habe das Ganze noch ein bisschen angepasst. face-smile Denn es muss ein normaler MA bedienen können:
Wort = Inputbox("Bitte Wort eingeben:", "Abfrage", "")  
If Wort = "" then   
	WScript.Quit
Else
	Wort = UCase(Wort)
	
	Pattern = ""  
	For i = 1 To Len(Wort)
		CharU = Mid(Wort, i, 1)
		If CharU >= "A" And CharU <= "Z" Or CharU = "Ä" Or CharU = "Ö" Or CharU = "Ü" Then  
			CharL = LCase(CharU)
		Else
			CharL = CharU
		End If
		Pattern = Pattern & "[" & CharU & CharL & "]"  
	Next

	erg = Inputbox("Ergebnis:", "Ergebnis", Pattern)  
End If

WScript.Quit
Wenn man das noch anders lösen kann, lass ich mich gerne belehren. face-wink

Wichtig ist eben, das Copy & Paste am Ende.


Gruss,
Dani
Member: bastla
bastla Jul 25, 2008 at 18:47:11 (UTC)
Goto Top
Hallo Dani!

Wenn man das noch anders lösen kann, lass ich mich gerne belehren.
Wenn's denn nicht die Konsole sein darf (dort könnte man/frau noch den Aufruf der "clip.exe" - zB von einem Server 2003 "geborgt" - dranhängen), passt die Lösung so - der Weg aus einem (mit WScript gestarteten) VBScript in die Zwischenablage ist etwas holprig.
Ich würde aber trotzdem zu meiner angepassten Version raten - ist etwas "schöner" ...

Grüße
bastla
Member: Dani
Dani Jul 25, 2008 at 18:57:30 (UTC)
Goto Top
Hi bastla,
ok, die clip.exe habe ich, wie wo was muss ich jetzt wo einbauen. Hör die Anwendung heute 1. Mal. face-confused

Es muss eben echt einfach zukopieren und easy bedienbar sein!


Gruss,
Dani
Member: Biber
Biber Jul 25, 2008 at 19:40:34 (UTC)
Goto Top
Nein Dani,

<OT>
ok, die clip.exe habe ich, wie wo was muss ich jetzt wo einbauen.
Hör die Anwendung heute 1. Mal.
es ist kein Musikclip, den Du da heruntergeladen hast...
...und nein, reinhören bringt auch keine neuen Erkenntnisse.

Geht mich ja nichts an, aber willst Du vor so schwierigen Sachen nicht erstmal 'ne Runde ausschlafen? face-wink
</OT>

SCNR
Biber
Member: Dani
Dani Jul 25, 2008 at 19:51:09 (UTC)
Goto Top
Hi Biberchen,
ausschlafen ist recht und gut, aber die Zeit habe ich nicht...bin schon froh wenn es 2-3 Stunden / Tag sind. face-sad

Ich muss morgen Früh in Testphase gehen...sprich es sind ca. 100 MA die betroffen. Wenn das vollbracht ist bis morgen früh um 7 Uhr, kann ich schlafen gehen. Damit ich am Sonntag weiterfliegen kann nach Bonn.

Sry, Jungs...aber hab's echt eilig.


Gruss,
Dani
Member: bastla
bastla Jul 25, 2008 at 19:58:52 (UTC)
Goto Top
Hallo Dani!

Dann mach ich's kurz face-wink:
@echo off & setlocal
set /p "Wort=Bitte Wort eingeben: "  
if "%Wort%" neq "" cscript "Scriptname.vbs" "%Wort%"|C:\Scripts\clip.exe  
Grüße
bastla
Member: Dani
Dani Jul 25, 2008 at 20:14:15 (UTC)
Goto Top
Hi bastla,
du bist ein Schatz....das sieht doch sehr gut aus. face-smile Jetzt weiß ich auch wieder das clip.exe die Zwischenablage ist.

Gibts noch ne Möglichkeit noch die paar Zeilen darüber wegzubekommen?


Gruss,
Dani
Member: bastla
bastla Jul 25, 2008 at 20:25:23 (UTC)
Goto Top
Hallo Dani!

Sorry - hatte noch die Variante "Parameterübergabe" im Kopf ...

Wenn Du die Version mit InputBox verwendest, dann nur:
@cscript "Scriptname.vbs"|C:\Scripts\clip.exe  
Grüße
bastla
Member: Dani
Dani Jul 25, 2008 at 21:24:04 (UTC)
Goto Top
Jetzt blick ichs gar nicht mehr....
Einer von uns beiden hat den Code jetzt durcheinander gebracht - ich wars.


Gruss,
Dani
Member: bastla
bastla Jul 25, 2008 at 21:30:27 (UTC)
Goto Top
Hallo Dani!

Nimm diese Script-Version (dann hast Du alle Möglichkeiten) und die obige Batchzeile:
If WScript.Arguments.Count > 0 Then
	Wort = WScript.Arguments(0)
Else
	Wort = InputBox("Bitte Wort eingeben:", "Abfrage")  
	If Wort = "" Then WScript.Quit  
End If

Wort = UCase(Wort)

Pattern = ""  
For i = 1 To Len(Wort)
	CharU = Mid(Wort, i, 1)
	If CharU >= "A" And CharU <= "Z" Or CharU = "Ä" Or CharU = "Ö" Or CharU = "Ü" Then  
	Pattern = Pattern & "[" & CharU & LCase(CharU) & "]"  
	Else
		Pattern = Pattern & CharU
	End If
Next
WScript.Echo Pattern
Grüße
bastla
Member: Dani
Dani Jul 25, 2008 at 21:46:48 (UTC)
Goto Top
Hi bastla,
werde ich wohl machen....mehr bleibt mir grad nicht übrig. Ich sollte seit ner 1 Stunde schon das nächste Step konfiguieren.. face-confused

Vielen Dank für deine schnelle Hilfe und Geduld.


Gruss,
Dani
Member: Dani
Dani Aug 25, 2008 at 15:23:10 (UTC)
Goto Top
Hi bastla,
die Groß-Kleinschreibung wird sauber ignoriert, jedoch zieht das bisherige Problem noch ein anderes hinter sich her:
Es gibt z.B. einen Usernamen "pf" und "apfeltasche". D.h. bei "pf" soll er REGEX zuschlagen und bei "apfeltasche" eben nicht. Wenn aber z.B. der User "pf" folgende Namen eingibt "test@pf" oder "te pf" soll der REGEX auch zuschlagen.


Gruss,
Dani

P.S. Weiß nicht so ganz, wie ich das Problem genauer schildern kann.
Member: bastla
bastla Aug 25, 2008 at 18:07:15 (UTC)
Goto Top
Hallo Dani!

Wenn ich das richtig interpretiere, muss der Username am Ende eines "Wortes" stehen ...

In diesem Fall wäre noch ein "\b" (Stichwort: "Wortgrenze") an den Suchstring anzuhängen - zB in der letzten Script-Zeile durch
WScript.Echo Pattern & "\b"  
Um auch das Zeichen davor einzuschränken, zB
WScript.Echo "(\b|[@])" & Pattern & "\b"  
Die eckigen Klammern um "@" sind eigentlich unnötig, außer, es sollen noch andere Zeichen unmittelbar vor dem Suchbegriff akzeptiert werden ...

Grüße
bastla
Member: Dani
Dani Aug 25, 2008 at 18:28:31 (UTC)
Goto Top
Hi bastla nicht ganz...ich versuche es anders zu erklären:

Im Moment habe ich folgenden Regexp - Ausdruck: [pP][fF] aus dem bisherigen Verlauf. Nun ist es so, dass wenn ich z.B. "apfeltasche" eingebe, matched Regex auch. Das soll aber so nicht sein. Sprich, er soll nur matchen wenn es das Wort an sich ist und nicht in einem Wort selbst vorkommt ( siehe Beispiel). Zum Beispiel soll auch bei folgenden Eingaben matchen:
test@pf, pf @ test, etc... sprich wenn ein Leerzeichen, ein "|", ein "@", ein "_" davor oder nach "pf" vorkommt soll gematched werden.


Grüsse,
Dani
Member: bastla
bastla Aug 25, 2008 at 18:36:24 (UTC)
Goto Top
Hallo Dani!

Wenn auch Zeilenanfang und -ende mit zu berücksichtigen sind, dann vielleicht:
WScript.Echo "(^|[@|_ ])" & Pattern & "($|[@|_ ])"  
Grüße
bastla
Member: Dani
Dani Aug 25, 2008 at 18:42:35 (UTC)
Goto Top
Perfekt....du bist einfach ein Schatz... face-wink
Dickes Danke!


Gruss,
Dani