如何用正则表达式(RegEx)查找变量相同但值不同的重复项
匹配变量相同但值不同的重复行的正则表达式方案
针对你要找的「0x开头的十六进制变量相同,但等号后对应值不同」的重复行,这里提供精准的正则表达式方案:
核心正则(匹配连续重复行)
^(\b0x[0-9A-Fa-f]+\b)\s*=\s*(.*)$\s*^\1\s*=\s*(?!\2).+$
正则说明
^(\b0x[0-9A-Fa-f]+\b):精准捕获每行开头的十六进制变量,单词边界\b确保只匹配完整的变量串,避免误匹配相似前缀的内容\s*=\s*(.*)$:匹配等号(前后允许任意空格),并把等号后的完整值捕获到分组2中\s*:匹配两行之间的任意空白内容(换行、空格、制表符都包含在内)^\1\s*=\s*:匹配下一行开头和分组1完全一致的变量(?!\2).+$:通过负向预查断言,确保下一行的值和分组2的内容不同,然后匹配该行剩余的全部内容
使用注意事项
- 必须启用多行模式(Multiline):让
^和$分别匹配每行的开头和结尾,不同编辑器的开启方式略有差异(比如VS Code中,开启正则搜索后点击^$按钮即可启用) - 如果需要匹配非连续的重复变量行(即相同变量的行不挨着),可以用下面的正则(适合支持正向预查的编辑器):
^(\b0x[0-9A-Fa-f]+\b)\s*=\s*.+$(?=.*^\1\s*=\s*(?!\1).+$)
为什么你之前的正则不生效
你使用的^(.*)(\W\1)+$是匹配整行内容完全重复的场景,相当于要求两行的变量和值完全一致,自然无法筛选出变量相同但值不同的目标行。
内容的提问来源于stack exchange,提问作者Kangguru Kikuk
相关产品推荐
相关产品推荐

