正则表达式:符号在字符串中只出现一次



我正在努力使用正则表达式来检测是否有一个特殊字符(hashtag#))在字符串中只包含一次。标签前后的所有内容都是未知的,可以是任何符号(包括空格和特殊字符)。

例子:

#matches

##不匹配

a12bc#1def65matches

a12bc##1def65不匹配

a234341#1212matches

a23$. 4341#1 ._21&2matches

#a23$. 4341#1 ._21&2#不匹配

我认为这将是安静的简单(我在正则表达式不是很好),所以我尝试

#{1}

令人惊讶的是,这并没有像我预期的那样工作。这个正则表达式也匹配字符串##。然后我尝试了一些像#{1}b(#{1}b|[^#{2}])这样的东西。但每次字符串#不匹配或##匹配正则表达式。

模式#{1}b可以写成#b,并且只有在后跟单词边界时才匹配#。这不会考虑整行中出现的次数。

此模式(#{1}b|[^#{2}])与之前相同,后跟一个替换|和可以匹配除#{2}以外的单个字符的否定字符类[^#{2}]


如果您不想匹配换行符,则匹配整个字符串:

^[^rn#]*#[^rn#]*$
  • ^字符串
  • 起始
  • [^rn#]*可选地匹配任何字符,除了换行符或#
  • #匹配#字符
  • [^rn#]*可选地匹配任何字符,除了换行符或#
  • $字符串结束

regex演示

最新更新