Solved

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

Posted on 2014-01-28
12
283 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 3
  • +2
12 Comments
 
LVL 51

Accepted Solution

by:
Rgonzo1971 earned 500 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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 54

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 54

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 54

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 54

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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
In threads here at EE, each comment has a unique Identifier (ID). It is easy to get the full path for an ID via the right-click context menu. However, we often want to post a short link within a thread rather than the full link. This article shows a…
Learn the basics of lists in Python. Lists, as their name suggests, are a means for ordering and storing values. : Lists are declared using brackets; for example: t = [1, 2, 3]: Lists may contain a mix of data types; for example: t = ['string', 1, T…
Learn the basics of while and for loops in Python.  while loops are used for testing while, or until, a condition is met: The structure of a while loop is as follows:     while <condition>:         do something         repeate: The break statement m…

751 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