ssj_100
ssj_100

Reputation: 168

Regex match an entire number with lookbehind and look ahead logic(without word boundaries)

I am trying to detect if a string has a number based on few conditions. For example I don't want to match the number if it's surrounded by parentheses and I'm using the lookahead and lookbehind to do this but I'm running into issues when the number contains multiple digits. Also, the number can be between text without any space separators.

My regex:

(?https://regex101.com/r/RnTSMJ/1

Sample examples: {2}: Should NOT Match. //My regex Works

{34: Should NOT Match. //My regex matches 4 in {34

45}: Should NOT Match. //My regex matches 4 in {45

{123}: Should NOT Match. //My regex matches 2 in {123}

I looked at Regex.Match whole words but this approach doesn't work for me. If I use word boundaries, the above cases work as expected but then cases like the below don't where numbers are surrounded with text. I also want to add some additional logic like don't match specific strings like 1st, 2nd, etc or #1, #2, etc

updated regex:

(?<!\[|\{|\(|#)(\b\d+\b)(?!\]|\}|\|st|nd|rd|th)

See here https://regex101.com/r/DhE3K4/4

123abd //should match 123

abc345 //should match 234

ab2123cd // should match 2123

Is this possible with pure regex or do I need something more comprehensive?

Upvotes: 2

Views: 2169

Answers (2)

The fourth bird
The fourth bird

Reputation: 163362

You could match 1 or more digits asserting what is on the left and right is not {, } or a digit or any of the other options to the right

(?<![{\d#])\d+(?![\d}]|st|nd|rd|th)

Explanation

  • (?<![{\d#]) Negative lookbehind, assert what is on the left is not {, # or a digit
  • \d+ Match 1+ digits
  • (?! Negative lookahead, assert what is on the right is not
    • [\d}]|st|nd|rd|th Match a digit, } or any of the alternatives
  • ) Close lookahead

Regex demo

Upvotes: 3

CoderX
CoderX

Reputation: 302

The following regex is giving the expected result.

(?<![#\d{])\d+(?!\w*(?:}|(?:st|th|rd|nd)\b))

Regex Link

Upvotes: 0

Related Questions