RAJ
RAJ

Reputation: 898

Extracting a string using regular expression

I need to extract a string 'MT/23232' I have written the below code, but it's not working, Can any one help me here?

'Policy created with MT/1212'
'Policy created with MT/121212'
'Policy created with MT/21212121212'

I have written this code

msg="MT/33235" id = msg.scan(/MT/\d+/\d+/)[0]

But it's not working for me, Can any one help me to extract this string?

Upvotes: 0

Views: 64

Answers (2)

Avinash Raj
Avinash Raj

Reputation: 174706

You need to escape the forward slash which exists next to MT in your regex and you don't need to have a forward slash after \d+ . And also i suggest you to add a lookbehind, so that you get a clean result. (?<=\s) Positive lookbehind which asserts that the match must be preceded by a space character.

msg.scan(/(?<=\s)MT\/\d+/)[0]

If you don't care about the preceding character then the below regex would be fine.

msg.scan(/MT\/\d+/)[0]

Example:

> msg = 'Policy created with MT/21212121212'
=> "Policy created with MT/21212121212"
> msg.scan(/(?<=\s)MT\/\d+/)[0]
=> "MT/21212121212"
> msg.match(/(?<=\s)MT\/\d+/)[0]
=> "MT/21212121212"

Upvotes: 1

SHS
SHS

Reputation: 7744

your_string.scan(/\sMT.*$/).last.strip

If your required substring can be anywhere in the string, then:

your_string.scan(/\bMT\/\d+\b/).last.strip # "\b" is for word boundaries

Or you can specify the acceptable digits this way:

your_string.scan(/\bMT\/[0-9]+\b/).last.strip

Lastly, if the string format is going to remain as you specified, then:

your_string.split.last

Upvotes: 1

Related Questions