Jump to content
Sign in to follow this  
Kiti

StringRegExp

Recommended Posts

Kiti

Hello! I want to pull out the number "26", but it doesn't work:

$string = "Total 26"
$result = StringRegExp($string, '([/z][1-9](1,2})(?:Total )', 1)

If @error == 0 Then
    MsgBox(0, "", $result[0])
EndIf

I don't really know how to put a non-capturing group capture what it finds after the group. I've tried "[/z]" in the beginning but it doesn't solve the problem. :D

Share this post


Link to post
Share on other sites
oMBRa

$string = "Total 26"
$result = StringRegExp($string, '(?:\b.*\b\s*)(\d+)', 1)

If @error == 0 Then
    MsgBox(0, "", $result[0])
EndIf

/Z matches at the end of the string, and why are you doing it from right to left?

Share this post


Link to post
Share on other sites
MrCreatoR

Try this:

$sString = "Total 26"
$sResult = StringRegExpReplace($sString, '(?:Total )([1-9]{1,2})$', '\1')
If @extended > 0 Then MsgBox(0, "", $sResult)

And you have non matching brakets, i.e: (1,2}


 

Spoiler

Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1

AutoIt_Rus_Community.png AutoIt Russian Community

My Work...

Spoiler

AutoIt_Icon_small.pngProjects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize Program

AutoIt_Icon_small.pngUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF
 
AutoIt_Icon_small.pngExamples: 
ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo

Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating AutoIt_Rating.gif)

* === My topics === *

==================================================
My_Userbar.gif
==================================================

 

 

 

AutoIt is simple, subtle, elegant. © AutoIt Team

Share this post


Link to post
Share on other sites
Kiti

Both examples are working if I try to pull out "26" only from the string "Total 26", but the point is that I have a larger text in clipboard and I want to pull "26" from all of it. This is the text:

:D

What is bolded always remains the same. What is red changes everytime. I want to pull the underlined words which are: 26, Marvin,2:489:4, 88.812, 49.807 and 12.679.

For the last three numbers I've made a script and it works:

$string = clipget()

$asResult1 = StringRegExp($string, '([.0123456789]{1,7})(?: metal)', 1)

If @error == 0 Then
    MsgBox(0, "", $asResult1[0])
EndIf

$asResult2 = StringRegExp($string, '([.0123456789]{3,7})(?: cristal)', 1)
If @error == 0 Then
    MsgBox(0, "", $asResult2[0])
    EndIf
    
    $asResult3 = StringRegExp($string, '([.0123456789]{3,7})(?: deuteriu)', 1)
If @error == 0 Then
    MsgBox(0, "", $asResult3[0])
EndIf

But I still don't know how to pull "Marvin" and "2:489:4" because both are changeable and there is nothing else next to them apart from "Aparator" which stays fixed.

And the above two scripts are not working on that entire text :D

Edited by Kiti

Share this post


Link to post
Share on other sites
oMBRa

try this:

#include <Array.au3>
$String = 'Aparator Marvin ([2:489:4])'
$a = StringRegExp($String, '(?:Aparator\s)(\b\w+\b)(?:\s\(\[)(.*?)(?:\]\))', 1)
_ArrayDisplay($a)

Share this post


Link to post
Share on other sites
Kiti

try this:

#include <Array.au3>
 $String = 'Aparator Marvin ([2:489:4])'
 $a = StringRegExp($String, '(?:Aparator\s)(\b\w+\b)(?:\s\(\[)(.*?)(?:\]\))', 1)
 _ArrayDisplay($a)

It's working, thank you very much! ;)

What about the "Total 26" thing? :D

And if you're not to busy right now, could you explain me what does the "(?:Aparator\s)(\b\w+\ :D (?:\s\(\[)(.*?)(?:\]\))" do? I really want to be able to make my own stringregexp match strings without getting them from the forum ^^

Share this post


Link to post
Share on other sites
oMBRa

(?:Aparator\s)

"?:" means non capturing group, "\s" matches any whitespace character

(\b\w+\ :D

"\b" matches at the beginnig or end of a word, "\w" matches any "word" character such as a,b,c, digits and underscore _

(?:\s\(\[)

it's another non capturing group that matches a whitespace character and "([", note that the backslash escape a special character so "\(" matches a round bracket, same for the square one

(.*?)

matches anything except newline ( but find the smallest match )

(?:\]\))

non capturing group that matches ")]" Edited by oMBRa

Share this post


Link to post
Share on other sites
Kiti

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  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.