如何用Python re库编写正则,排除以#开头及#后带多空格/制表符的字符串?
可以实现,具体方案如下
核心思路
要满足你的需求,我们需要用负向先行断言来排除两类行:
- 以
#开头(包括#后跟随任意空格/制表符)的注释行 - 已匹配过的
module load MNO行
同时确保只匹配module load XXX格式的有效行。
正则表达式与Python代码实现
import re # 定义正则模式 pattern = r'^(?!#\s*)(?!module load MNO$)module load .+$' # 测试用例 test_cases = [ "module load ABC", "# module load DEF", "#\tmodule load GHI", "# \tmodule load JKL", "module load MNO", "module load XYZ" ] for line in test_cases: match = re.fullmatch(pattern, line) print(f"行: '{line}' → 匹配结果: {bool(match)}")
正则模式解释
^:匹配行的起始位置(?!#\s*):负向先行断言,确保行开头不是#(或#后跟任意数量的空格/制表符)(?!module load MNO$):负向先行断言,确保整行不是module load MNOmodule load .+:匹配以module load开头,后面跟任意非空内容的行$:匹配行的结束位置
测试结果
运行代码后会输出:
行: 'module load ABC' → 匹配结果: True 行: '# module load DEF' → 匹配结果: False 行: '#\tmodule load GHI' → 匹配结果: False 行: '# \tmodule load JKL' → 匹配结果: False 行: 'module load MNO' → 匹配结果: False 行: 'module load XYZ' → 匹配结果: True
扩展说明
如果你的场景中允许有效行开头有空格/制表符(比如 module load ABC),只需要在正则中加入\s*即可,修改后的模式为:
pattern = r'^(?!#\s*)\s*(?!module load MNO$)module load .+$'
内容的提问来源于stack exchange,提问作者GGGGGGGG5566
相关产品推荐
相关产品推荐

