正则表达式区分逻辑运算与头文件包含中的<符号
解决方案
针对你的需求,我们可以通过负向预查来区分需要添加空格的<和>符号,避免修改预处理指令(如#include<...>)和成对无空格包裹的符号(如a<b>)。
处理 < 符号的正则表达式
使用以下正则匹配需要添加前后空格的<:
(?<!#\s*include\s*)<(?!\s)(?!\S+>)
替换为:<(前后带空格)
正则解释:
(?<!#\s*include\s*):负向预查,排除#include相关场景(允许#和include、include和<之间有任意空格);<:匹配目标符号;(?!\s):负向预查,确保<后面没有空格(避免重复添加);(?!\S+>):负向预查,排除<后紧跟一串非空格字符再到>的情况(如a<b>里的<)。
处理 > 符号的正则表达式
使用以下正则匹配需要添加前后空格的>:
(?<!<\S+)(?<!\s)>(?!\s)
替换为:>(前后带空格)
正则解释:
(?<!<\S+):负向预查,排除>前是<加一串非空格字符的情况(如a<b>里的>);(?<!\s):负向预查,确保>前面没有空格;>:匹配目标符号;(?!\s):负向预查,确保>后面没有空格。
测试你的示例
将上述正则应用到你的输入文本:
原输入:
#include<stdio.h> a<b a<b> a<v and c>d
处理后结果:
#include<stdio.h> a < b a<b> a < v and c > d
完全符合你的期望。
内容的提问来源于stack exchange,提问作者paradoxD
相关产品推荐
相关产品推荐

