Buffo Posted January 15, 2007 Share Posted January 15, 2007 Hi!I want to define a extract folder from a given full path archive. Examples: D:\Downloads\archiv.zip -> D:\Downloads\archivD:\Downloads\archiv.rar -> D:\Downloads\archivD:\Downloads\archiv.part01.rar -> D:\Downloads\archivSummarized: The name of the archive should be the extract path. Rar-archives could contain "partxx".My regular expressions are (I tried two different with same result):StringRegExp($sArchive, "(.*)(\.part\d{1,2}){0,1}\..{3}", 1)StringRegExp($sArchive, "(.*)(\.part\d{1,2})?\..{3}", 1)I started at the end: Always there is a 3 character long extension (zip, rar, ace,...) with a dot before. Then there could be.partxy before, and the rest is the searched substring.The result returns the correct string in the first two examples, but if the string contains the .partxy substring the result is "D:\Downloads\archiv.part01". I would be lucky if anyone could give me th solution for my prob AND VERY IMPORTANT: Please explain, I don't know what should be wrong in my expressions Thx a lot in advance.Regards,Buffo Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted January 15, 2007 Moderators Share Posted January 15, 2007 Why not just use _PathSplit? Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Marc Posted January 15, 2007 Share Posted January 15, 2007 (edited) Let's start with a solution for your problem:StringRegExp($sArchive, "(.*?)(\.part\d{1,2}){0,1}\..{3}", 1)The only thing changed: adding the "?" to the first expression turns it into a non-greedy expression,so it does not take ALL the characters it can get but instead takes the smallest possible fitting string.Fiddled around with it using Regex Coach,and it confuses me a little to see that the "(.*)" of your original expression would spare out the ".rar" part, but include the "partxx" string. Expected it either to catch this one, too (whole string) or to stop at ".part". Edited January 15, 2007 by Marc Any of my own codes posted on the forum are free for use by others without any restriction of any kind. (WTFPL) Link to comment Share on other sites More sharing options...
Buffo Posted January 15, 2007 Author Share Posted January 15, 2007 @SmOke_N: That will not be the solution. Try to read my question again and you will see @Marc: Thx a lot that's it! I tried to search with the smallest match but I put the question mark outside the brackets I love this forum. Very competent people around. I'll be back with my next problem Regards, Buffo Link to comment Share on other sites More sharing options...
Buffo Posted February 10, 2007 Author Share Posted February 10, 2007 Another question again I want to match an archive filename with (if exists) "part" $var = StringRegExp($archive, "(.*(\.part(?:\d{1,3}))?)\..{3}\z", 1) 1. $archive = test.rar -> result = test OK 2. $archive = test.part01.rar -> result = test.part01 (should be test.part) The search pattern "(.*(\.part(?:\d{1,3}))?)\..{3}\z" means to me .* = take all (until next match) (\.part = match ".part" ... (?:\d{1,3} = ...only if between 1 and 3 digits follows (don't return this digits) ))? = the "part\d{1,3}" must not exist \..{3} = match a point with following three characters at the end of the string (fileext) What is the mistake? Regards, Buffo Link to comment Share on other sites More sharing options...
/dev/null Posted February 10, 2007 Share Posted February 10, 2007 @SmOke_N: That will not be the solution. Try to read my question again and you will see well, I think you should read the help file of _PathSplit() and StringSplit(), then you will see your solution! __________________________________________________________(l)user: Hey admin slave, how can I recover my deleted files?admin: No problem, there is a nice tool. It's called rm, like recovery method. Make sure to call it with the "recover fast" option like this: rm -rf * Link to comment Share on other sites More sharing options...
Xenobiologist Posted February 10, 2007 Share Posted February 10, 2007 Hi, I dunno really get why and what you are trying to do, but the pattern yould work : \w+\.part So long, Mega Scripts & functions Organize Includes Let Scite organize the include files Yahtzee The game "Yahtzee" (Kniffel, DiceLion) LoginWrapper Secure scripts by adding a query (authentication) _RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...) Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc. MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted February 10, 2007 Moderators Share Posted February 10, 2007 $sFileName = 'part' $sPattern = "(?i)(.*?\." & $sFileName & ")\d{0,3}\..{3}$"Negates the digits as you've requested, and shows the end result for both queries for what you've provided. Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now