Sign in to follow this  
Followers 0
michaelslamet

RegEx Help Needed (find some text)

7 posts in this topic

I have a txt file that contain something like this:

blablabla

blablabla

blablabla

Lock files:

blablabla

blablabla

blablabla

blablabla

!!autoit~~

//AUTOITaaa

--autoIT//aaa

blablabla

blablbla

blablba

</pre>

blablabla

blablabla

AUTOIT

I would like to count home many word "AUTOIT" (case insensitive) between word "Lock files:" (case insensitive) until first </pre>

(on example above, it's 3>

How can I do that?

Thanks :)

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Is there a <pre> at the start of the file? If there is then something like this...

#include <Constants.au3>

Local $aSRE = StringRegExp(FileRead('myLog.txt'), '(?s)Lock files:.*</pre>', 3)
If @error = 0 Then
    StringReplace($aSRE[0], 'autoit', '')
    Local $iReplaced = @extended
    MsgBox($MB_SYSTEMMODAL, '', 'Replaced; ' & $iReplaced)
EndIf
Edited by guinness

_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Sometimes people overthink the problem and believe regexp is the answer, but just a little bit of lateral thinking and you can use native string functions e.g.

#include <Constants.au3>
#include <File.au3>

Local $aArray = 0, _
    $fInPre = False
    $iReplaced = 0
    
_FileReadToArray('myLog.txt', $aArray) ; This is basically StringSplit with @CRLF as the delim.
For $i = 1 To $aArray[0]
    Switch $aArray[$i]
        Case 'Lock files:'
            $fInPre = True
        Case '</pre>'
            If $fInPre Then ExitLoop
        Case Else
            If $fInPre Then
                StringReplace($aArray[$i], 'autoit', '')
                $iReplaced += @extended
            EndIf
    EndSwitch   
Next
MsgBox($MB_SYSTEMMODAL, '', 'Replaced; ' & $iReplaced)
Edited by guinness

_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

guinness

I believe you meant to use "Lock files:" instead of "<pre>" in both of your examples. See post  #1.

Here is a method of using two native string functions.

#cs
    blablabla
    AUTOIT
    blablabla
    blablabla
    Lock files:
    blablabla
    blablabla
    blablabla
    blablabla
    !!autoit~~
    //AUTOITaaa
    --autoIT//aaa
    blablabla
    blablbla
    blablba
    </pre>
    blablabla
    blablabla
    AUTOIT
#ce

;local $sTestString = FileRead('myLog.txt')
;or
Local $sTestString = StringRegExpReplace(FileRead(@ScriptFullPath), "(?is)^.*?#cs(.+?)#ce.*$", "\1")

;ConsoleWrite($sTestString & @LF)
Local $sTempStr = StringRegExpReplace($sTestString, "(?is)(^.*?Lock files:)(.+?)(</pre>.*?$)", "\2") ; Get all text between "Lock files:" and "</pre>".
;ConsoleWrite($sTempStr & @LF)
StringReplace($sTempStr, "AUTOIT", "")
MsgBox(0, "", 'Number of "AutoIt" replacements between "Lock files:" and first following occurrence of "</pre>" = ' & @extended & @LF) ; Returns 3

Share this post


Link to post
Share on other sites

Thank you, Guinness, thank you Malkey :)

Your code running great. However, what if the scenario is this:

Text file content:

blablabla

blablabla

blablabla

Lock files:

blablabla

blablabla

blablabla

blablabla

cccc autoit

bbbb AUTOIT aaa

  --autoIT //aaa

  !autoitxxx

blablabla

blablbla

blablba

</pre>

blablabla

blablabla

AUTOIT

I would like to grab between word "Lock files:" (case insensitive) until first </pre> (case insensitive)

word autoit until (to left side) first space BEFORE IT and how many the occurance.

For example, from above text, we will get:

autoit --> 2 occurances (from line "cccc autoit" and line bbbb AUTOIT aaa

--autoIT --> 1 occurances (from line "  --autoIT //aaa")

!autoit --> 1 occurances (from line "  !autoitxxx")

So the result is in 2D array where index [0] is the variation of word "autoit" and index [1] store how many times that variation occur

Seems pretty difficult that is :P

Share this post


Link to post
Share on other sites

 

Sometimes people overthink the problem and believe regexp is the answer, but just a little bit of lateral thinking and you can use native string functions e.g.

#include <Constants.au3>
#include <File.au3>

Local $aArray = 0, _
    $fInPre = False
    $iReplaced = 0
    
_FileReadToArray('myLog.txt', $aArray) ; This is basically StringSplit with @CRLF as the delim.
For $i = 1 To $aArray[0]
    Switch $aArray[$i]
        Case '<pre>'
            $fInPre = True
        Case '</pre>'
            If $fInPre Then ExitLoop
        Case Else
            If $fInPre Then
                StringReplace($aArray[$i], 'autoit', '')
                $iReplaced += @extended
            EndIf
    EndSwitch   
Next
MsgBox($MB_SYSTEMMODAL, '', 'Replaced; ' & $iReplaced)

 

Yes, that is me :*

Most of the time I think too hard for something actually simple :

Share this post


Link to post
Share on other sites

Ah, I changed my example(s).


_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0