首页 > 解决方案 > 正则表达式忽略带重复磅的字符串 (#)

问题描述

我需要一个如下所示的正则表达式。

输入字符串:

####
####white-space    
Test#
Test#white-space

输出:

####               - invalid
####white-space    - invalid
Test###            - invalid
Test-Test###white-space - invalid
Test-Test#         - valid
Test#white-space   - valid

正则表达式应匹配以# 或#[:space] 或#white-space 结尾的字符串,但不应匹配以重复# 或####white-space 结尾的字符串。

我有这样的事情(https://regexr.com/3orvv):

^\s*\w*\S*(?:(#)(?!\1))\s?$

但它没有按预期工作。

标签: regex

解决方案


如果我正确理解了要求,您可以使用这个正则表达式:

^(?!.*#{2}\s*$).*#\s*$

正则表达式演示

  • (?!.*#{2}\s*$)断言我们没有 2 或更多#后跟可选空格在行尾是一个否定的前瞻。
  • .*#\s*$匹配#最后跟 0 个或多个空格的 a。

推荐阅读