如何修改正则表达式以精准忽略'​'并匹配#符号
正则表达式修改方案
原正则表达式(?<!&)#(?!8203;)存在两个核心问题:
- 错误排除了所有前缀为
&的#(比如&#中的#),但你仅需要忽略属于​实体的#; - 错误排除了所有后缀为
8203;的#(比如#8203;中的#),这类#并不属于需要忽略的目标范围。
修改后的正则表达式
(?<!&)#|(?<=&)#(?!8203;)
或者更简洁的等价写法:
(?:(?<!&)|(?<=&)(?!8203;))#
逻辑说明
(?<!&)#:匹配前缀不为&的#,覆盖普通文本中的#(如he#ll#o)以及#8203;这类独立的#;(?<=&)#(?!8203;):匹配前缀为&但后缀不是8203;的#,既覆盖&#这类场景,又精准排除​中的#。
测试验证
- 输入
he#ll#o:匹配2个#,符合预期; - 输入
he#ll#o​:匹配前2个#,忽略​中的#,符合预期; - 输入
&#&#&#:匹配3个#,解决原正则无法匹配的问题; - 输入
#8203;#8203;#8203;:匹配3个#,解决原正则无法匹配的问题。
内容的提问来源于stack exchange,提问作者REAL O G
相关产品推荐
相关产品推荐

