Improve company productivity with a Business Account.Sign Up

x
?
Solved

Regex versus substring, quick solution to grab a String range out of a string

Posted on 2014-01-28
12
Medium Priority
?
320 Views
Last Modified: 2014-02-04
Hi all
Just a pice of cake

How can i grab this number "107501" outoff this  "20130327_110406_10_107501.pay.v01.xml"

Please note the number between 10_*.pay can grow and shrink.
I.e the number can start with 1 and grow to 99999999

The area I need to grab with Regex or substring is between _*******.pay.v01.xml
I need to grab what ever is in this are marked ***** only

Thanks in Advance
0
Comment
Question by:ZURINET
  • 4
  • 3
  • 3
  • +2
12 Comments
 
LVL 55

Accepted Solution

by:
Rgonzo1971 earned 2000 total points
ID: 39814486
HI,

Maybe
string s = "20130327_110406_10_107501.pay.v01.xml";
string shortS  = s.Substring(0, s.Length - 12);
string[] words = shortS.Split('_');
string lastItem = words[words.Length - 1];

Open in new window

Regards
0
 
LVL 35

Expert Comment

by:Dan Craciun
ID: 39814592
Or, using regex:

.*_(\d+)\.pay

Open in new window

Will capture your number in group 1.
0
 
LVL 9

Expert Comment

by:Derek Jensen
ID: 39814751
@Dan, is that a pipe or a backslash? Looks funny on my mobile. Surround w/code tags to make more readable. :-)
0
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

 
LVL 61

Expert Comment

by:Bill Prew
ID: 39814775
Just for variety, here's another fairly simple approach.

s = "20130327_110406_10_107501.pay.v01.xml"
f = Split(Split(s, ".")(0), "_")(3)

Open in new window

~bp
0
 
LVL 9

Expert Comment

by:Derek Jensen
ID: 39814794
@bill, have you tested that? That's a very elegant solution if it works. :-)
I'd also suggest running f through a "^\d+$" regex, just to validate it's all digits. :-)
0
 
LVL 35

Expert Comment

by:Dan Craciun
ID: 39814802
Looks like should work. But it hardcodes the number of "_" and it makes it less expandable for different strings.
0
 
LVL 61

Expert Comment

by:Bill Prew
ID: 39814821
Yes, I did test it. And yes, it does assume a format to the data to parse, but I guess all solutions have to do that in one way or another.

If the number of "_" can change that is fairly easily handled as:

a = Split(Split(s, ".")(0), "_")
f = a(UBound(a))

Open in new window

~bp
0
 
LVL 61

Expert Comment

by:Bill Prew
ID: 39814828
I should note that my approach was prototyped in VB script, since scripting languages was one of the zones the question was posted in.

~bp
0
 
LVL 61

Expert Comment

by:Bill Prew
ID: 39814835
And another approach in VBS which could be adapted to other languages:

f = Left(s, Instr(s, ".")-1)
f = Mid(f, InStrRev(f, "_")+1)

Open in new window

~bp
0
 
LVL 9

Expert Comment

by:Derek Jensen
ID: 39819551
Thus the beauty of Regex: nearly every single language in existence has support for it in one form or another. :-)
0
 

Author Comment

by:ZURINET
ID: 39831893
Hi all

This regex is not doing what is suppose to do :-(   .*_(\d+)\.pay

Thanks in

Advance
0
 
LVL 35

Expert Comment

by:Dan Craciun
ID: 39832024
Why?
What's the string where it fails and what's the output of $1?
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

The article shows the basic steps of integrating an HTML theme template into an ASP.NET MVC project
The Windows functions GetTickCount and timeGetTime retrieve the number of milliseconds since the system was started. However, the value is stored in a DWORD, which means that it wraps around to zero every 49.7 days. This article shows how to solve t…
Learn the basics of strings in Python: declaration, operations, indices, and slicing. Strings are declared with quotations; for example: s = "string": Strings are immutable.: Strings may be concatenated or multiplied using the addition and multiplic…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…

595 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question