Home > database >  regex to extract a specific set of numbers
regex to extract a specific set of numbers

Time:04-02

I need a regular expression to extract a specific set of numbers from a string. The string could contain letters, special characters and spaces.

Input examples:

This is a test 99 12 3456
This is test 2 94123456
This is test 3 357 95123456
This is test 4 35797123 456
And so on…

The regex should look for a string of 8 numbers starting with 94 or 95 or 96 or 97 or 99 followed by 6 more numbers.

example:

94<6 more numbers here>
95<6 more numbers here>
96<6 more numbers here>
97<6 more numbers here>
99<6 more numbers here>

or 11 numbers starting with 357 followed by 94 or 95 or 96 or 97 and 6 more numbers.

example:

35794<6 more numbers here>
35795<6 more numbers here>
35796<6 more numbers here>
35797<6 more numbers here>
35799<6 more numbers here>

So the output should either be 8 numbers, or 11 numbers. Less than 8 or more than 11 is not a valid output. Also anything between 8 and 11 is not valid.

Hope this makes it more clear

Thanks for your help

CodePudding user response:

This regular expression will do it if you remove the spaces from the input first: 3579[4-9](?:\d{8}|\d{6})

CodePudding user response:

Maybe this:

(357|94|95|96)[\d ]{6,}

Which means "357" or "94" or "95" or "96" followed by at least six digits and/or spaces. I wasn't sure exactly what you want. It would be better just to post the exact input and output desired.

CodePudding user response:

If you’re working in an environment that supports lookbehinds, you can ensure you’re not matching a partial number by using a negative lookbehind and negative lookahead:

   /(?<!\d)(?:357)?9[4-79]\d{6}(?!\d)/

(?<!\d): Negative lookbehind (ensure there isn’t a digit before the matching expression)

(?:357)?: Create a non-capturing group of 357 to attach an optional quantifier (match 357 zero to 1 times)

9: Match 9

[4-79]: Character set with range 4-7 and 9 (match one of these characters)

\d{6}: Match a digit exactly 6 times

(?!\d): Negative lookahead (ensure there isn’t a digit after the matching expression)

  • Related