Shivam Gupta
Shivam Gupta

Reputation: 82

Need help in this Regular Expression

The regular expression I am using:

%s??[a-z](:\d+|)(^\[)? 

The string is:

"%sprix is the %s[4] online %s[3]:6 pshopping %s:9 in %s" 

I am trying to find all %s from string except %s[4] and %s[3].

My output using the above regular expression is not giving expected results.

Expected Output is:

%s, %s:9, %s

My Output is:

%s, %s[ , %s[, %s:9, %s

Upvotes: 1

Views: 59

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 627609

You may use

%s(?!\[)(?::\d+)?

See the regex demo.

Details:

  • %s - a percentage sign and s
  • (?!\[) - that is not followed with [
  • (?::\d+)? - an optional sequence of a : and one or more digits

The above regex will fail the match in all cases when %s is followed with [, e.g. in %s[text. If you only want to fail the match when %s is followed with [+number+], use %s(?!\[\d+\])(?::\d+)?.

Upvotes: 2

Related Questions