StringRegExp Frage

  • Moin zusammen,

    Ich weis, dass dazu schon X-Fragen gestellt wurden und auch das es ein Tut dazu gibt. Fakt ist der *peep* *peep* und ich lieben uns einfach nicht und ich kapier den *peep* einfach nicht.

    Ich möchte nach Wörter in einem String suchen. Les den Text einer Datei ein und man muss die zu suchenden Wörter dann in ene InputBox eingeben z.B. "*peep* Funktion".

    Es soll also nach "*peep*" und nach "Funktion" gesucht werden, ohne Groß/Kleinschreibung zu beachten und alles unter Flag=0 (Rückgabe 0 oder 1). Wenn beide Wörter, einzeln betrachtet, irgendwo in dem String gefunden werden, soll die Funktion greifen.

    Pls Hilfe mit dem *peep*

    LG
    MrB

    P.S.: Genug ge*peept* grr... :D

    Einmal editiert, zuletzt von MrB (2. Mai 2011 um 21:35)

  • Ich kenn mich leider nicht mit StringRegExp aus, aber du könntest erstmal ein

    [autoit]

    Stringsplit()

    [/autoit]

    mit " " machen, um die 2 oder mehr Wörter zu trennen, und dann mit

    [autoit]

    StringInStr()

    [/autoit]

    in einer For Schleife gucken ob die im Text sind

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Er möchte lediglich die in der Inputbox eingegebenen Worte im Text auf Existenz prüfen.

    schnelles Beispiel
    [autoit]

    #region - Timestamp
    ;2011-05-02 20:43:24
    #endregion - Timestamp

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $sString = "Hallo Welt! Das ist ein Teststring"

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("Form1", 307, 74, 228, 148)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $Input1 = GUICtrlCreateInput("Input1", 8, 8, 201, 21)
    $Button1 = GUICtrlCreateButton("Button1", 216, 8, 75, 25)
    GUICtrlSetOnEvent(-1, "_check")
    $Label1 = GUICtrlCreateLabel("Label1", 8, 40, 284, 17)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _check()
    Local $aResult[1] = [0]
    $aWords = StringSplit(GUICtrlRead($Input1), " ")
    For $i = 1 To $aWords[0]
    If StringInStr($sString, $aWords[$i]) Then
    _ArrayAdd($aResult, $aWords[$i])
    EndIf
    Next
    If UBound($aResult) > 1 Then
    GUICtrlSetData($Label1, "Treffer für: " & StringTrimLeft(_ArrayToString($aResult), 2))
    EndIf
    EndFunc ;==>_check

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]
  • name22

    *grins* die Wörter, die von dem *peep* erstetzt werden, wollte ich nicht wirklich hier hin schreiben.

    mal ohne *peep*

    Spoiler anzeigen
    Zitat

    Ich weis, dass dazu schon X-Fragen gestellt wurden und auch das es ein Tut dazu gibt. Fakt ist der stark riechende Unrat und ich lieben uns einfach nicht und ich kapier den stark riechenden Unrat einfach nicht.

    Ich möchte nach Wörter in einem String suchen. Lass den Text einer Datei ein und man muss die zu suchenden Wörter dann in einer InputBox eingeben z.B. "irgendwas Funktion".

    Es soll also nach "irgendwas" und nach "Funktion" gesucht werden, ohne Groß/Kleinschreibung zu beachten und alles unter Flag=0 (Rückgabe 0 oder 1). Wenn beide Wörter, einzeln betrachtet, irgendwo in dem String gefunden werden, soll die Funktion greifen.

    Pls Hilfe mit dem stark riechenden Unrat

    Und jetzt mal ordentlich ;)

    Also ich hab irgendeinen beliebigen Text in einer Variablen ($text) abgelegt und habe in einer anderen Variable einen beliebigen Suchtext ($search) der aus mehreren Wörtern oder Zahlen bestehen kann und durch eine oder mehrere Leerzeichen getrennt ist. Und wenn alle Teile von $search in $text enthalten sind, egal in welcher Reihenfolge, dann soll das Pattern greifen.

    [autoit]

    $text = "Dies ist mein 113 Versuch, dass hier zu kapieren ^^"
    $search = "11" ;Ergebnis 0 (wäre schön muss aber nicht sein)
    $search = "113" ;Ergebnis 1
    $search = "dies hier mein" ;Ergebnis 1
    $search = "die ier ein" ;Ergebnis 0 (wäre schön muss aber nicht sein)

    [/autoit]

    Hoffe hab mich verständlich ausgedrückt

    @ i2c
    Jop, prinzipiell richtig

    i2c & BadBunny

    Hab nur ich das Gefühl, dass die Methode mit StringSplit/StringInString bei größeren Texten (15MB) doch recht langsam ist. Zusätzlich muss ich auch noch mehrere Dateien durchsuchen mit unbekannter Größe und da sollte doch StringRegExp schneller sein, oder täusche ich mich da ?

    LG
    MrB

  • Zitat

    Hab nur ich das Gefühl, dass die Methode mit StringSplit/StringInString bei größeren Texten (15MB) doch recht langsam ist. Zusätzlich muss ich auch noch mehrere Dateien durchsuchen mit unbekannter Größe und da sollte doch StringRegExp schneller sein, oder täusche ich mich da ?


    Ich denke schon, nur wird der Gescheindigkeitsunterschied wieder dadurch zunichte gemacht, dass du willst, dass die Reihenfolge ignoriert wird. Im Prinzip würde man dann nur StrinInStr durch StringRegExp ersetzen (und das wäre dann vielleicht sogar noch langsamer).

  • Schon, aber mit StringRegExp lässt sich auch mehr verwirklichen (wenn ich das zumindestens richtig gelesen hab). Wenn man bei i2c´s Script z.B. den Suchstring "kein Welt" eingibt, ergibt sich ein Treffer für Welt.

    Klar und auch richtig aber nicht gewollt, da ja "kein" nicht beachtet wurde. Richtig wäre gewesen, dass kein Treffer angezeigt wird. Mal schauen, was man da noch machen kann

    P.S.: kleine Änderung und es läuft nach meinen Vorstellungen

    Spoiler anzeigen
    [autoit]

    #region - Timestamp
    ;2011-05-02 20:43:24
    #endregion - Timestamp

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $sString = "Hallo Welt! Das ist ein Teststring"

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("Form1", 307, 74, 228, 148)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $Input1 = GUICtrlCreateInput("Input1", 8, 8, 201, 21)
    $Button1 = GUICtrlCreateButton("Button1", 216, 8, 75, 25)
    GUICtrlSetOnEvent(-1, "_check")
    $Label1 = GUICtrlCreateLabel("Label1", 8, 40, 284, 17)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _check()
    Local $aResult[1] = [0]
    $aWords = StringSplit(GUICtrlRead($Input1), " ")
    For $i = 1 To $aWords[0]
    If StringInStr($sString, $aWords[$i]) Then
    _ArrayAdd($aResult, $aWords[$i])
    EndIf
    Next
    If UBound($aResult) >= UBound($aWords) Then ;<----- Änderung
    GUICtrlSetData($Label1, "Treffer für: " & StringTrimLeft(_ArrayToString($aResult), 2))
    Else
    GUICtrlSetData($Label1, "Keine Treffer")
    EndIf
    EndFunc ;==>_check

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]
  • Ich hab i2c's Beispiel kurz angepasst.

    Spoiler anzeigen
    [autoit]

    #region - Timestamp
    ;2011-05-02 20:43:24
    #endregion - Timestamp

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $sString = "Hallo Welt! Das ist ein Teststring"

    [/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("Form1", 307, 74, 228, 148)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $Input1 = GUICtrlCreateInput("Input1", 8, 8, 201, 21)
    $Button1 = GUICtrlCreateButton("Button1", 216, 8, 75, 25)
    GUICtrlSetOnEvent(-1, "_check")
    $Label1 = GUICtrlCreateLabel("Label1", 8, 40, 284, 17)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _check()
    $aWords = StringSplit(GUICtrlRead($Input1), " ")
    $bIsInString = True
    For $i = 1 To $aWords[0]
    If Not StringInStr($sString, $aWords[$i]) Then
    $bIsInString = False
    ExitLoop
    EndIf
    Next
    GUICtrlSetData($Label1, "Ergebnis: " & $bIsInString)
    EndFunc ;==>_check

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]
  • Wenn man bei i2c´s Script z.B. den Suchstring "kein Welt" eingibt, ergibt sich ein Treffer für Welt.

    Ich darf mal kurz zitieren: "...muss die zu suchenden Wörter dann in ene InputBox eingeben z.B. "*peep* Funktion".
    Es soll also nach "*peep*" und nach "Funktion" gesucht werden, ohne Groß/Kleinschreibung zu beachten und alles unter Flag=0 (Rückgabe 0 oder 1)."

    Das liest sich für mich aber anders.

  • Ja, hast schon recht, in dem Post war´s falsch ausgedrückt. Zitier mich mal selber aus meiner genaueren Erklärung (Post 2 von mir)

    Zitat

    Und wenn alle Teile von $search in $text enthalten sind, egal in welcher Reihenfolge, dann soll das Pattern greifen.

    Aber hast schon recht. Asche auf mein Haupt ;)

    P.S.: Danke an alle. Denke mal ich kann mit der Lösung leben ;)