在这个正则表达式中需要帮助

Need help in this Regular Expression

我使用的正则表达式:

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

字符串是:

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

我试图从字符串中找到除 %s[4]%s[3] 之外的所有 %s

我使用上述正则表达式的输出没有给出预期的结果。

预期输出为:

%s, %s:9, %s

我的输出是:

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

您可以使用

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

参见regex demo

详情:

  • %s - 百分号和 s
  • (?!\[) - 后面没有跟 [
  • (?::\d+)? - : 和一个或多个数字
  • 的可选序列

%s 后跟 [ 时,上述正则表达式在所有情况下都将无法匹配,例如在 %s[text。如果只想在 %s 后跟 [+number+] 时匹配失败,请使用 %s(?!\[\d+\])(?::\d+)?.