BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Tom
Super User Tom
Super User

@hernan_AR wrote:

this is the regex

 

s/(^.*)(SomeAlphaNumPrefix)([\d]+)(\.sas7bdat)$/$3/

 

with this, I get the digits between the prefix and the extension to the end

because I just need the digits, discarding the rest

 

do you see anything wrong here ?

 


Yes. The pattern is NOT accounting for the trailing spaces that will be padded onto a fixed length variable so that its length matches the defined length of the variable.  You could for example do something like:

s/(^.*)(SomeAlphaNumPrefix)([\d]+)(\.sas7bdat\ *)$/$3/

 

ChrisNZ
Tourmaline | Level 20
$ means end of string. If you don't trim you have spaces at the end as I said, so you can't match this expression.
Tom
Super User Tom
Super User

Note if you want the last word in a line use the SCAN() function with -1 as the index.  Much easier (and faster) then REGEX.

extension = scan(row,-1,'.');
hernan_AR
SAS Alumni

oh, good to know it

that's why communities llike this are great!

thanks

CFC_SAS_Communities_400x225.jpgCFC_SAS_Communities_400x225.jpg

Call for content now open!

It's your turn to help shape SAS Innovate 2027. Share your expertise and inspire the SAS community.

Submit your proposal →

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 18 replies
  • 7565 views
  • 4 likes
  • 3 in conversation