当前位置:  开发笔记 > 编程语言 > 正文

Python:不以#开头的行

如何解决《Python:不以#开头的行》经验,为你挑选了2个好方法。

我有一个包含类似内容的文件

#comment
#comment
不是评论

#comment
#comment
不是评论

我试图逐行读取文件,只捕获不以#开头的行.我的代码/正则表达式出了什么问题?

import re

def read_file():
    pattern = re.compile("^(?

原始代码捕获所有内容而不是预期.



1> Iron Fist..:

另一种简单的方法是仅检查char您读取的每行中的第一行是否包含#字符:

def read_file():

    with open('list') as f:
        for line in f:
            if not line.lstrip().startswith('#'):
                print line


也许通过使用`line.lstrip().startswith("#")`来使它变得更加防弹,以防该行在`#`之前有空格.@Mico:你使用*lookbehind*断言而不是*lookahead*断言.Lookbehind在行开头之前看到换行符,而不是行开头后的`#`字符.

2> Mike Covingt..:

铁拳显示你应该这样做的方式; 但是,如果你想知道你的正则表达式有什么问题,应该是这样的:

^[^#].*

说明:

^ - 匹配行的开头.

[^#]- 匹配不是的东西#.[^...]是你怎么说不匹配的东西(只需替换...你不想匹配的任何字符.例如,[^ABC123]将匹配一个不是A,B,C,1,2或3的字符.不要让^这表示一行/字符串的开头让你感到困惑.这两者^完全无关.

.* - 匹配零或更多的其他东西.

编辑:

原因^(?是不区分# commentnot a comment是在当前位置之前(?检查文本.引擎在字符串开始后的第一个符号之前查找,并且因为在字符串开始之前没有,所以任何行都与子模式匹配.要真正检查第一个符号是否是,您只需要使用正则表达式.或者,如果可以有前导空格,.##.*#^#.*^\s*#


@MikeCovington:这是一个错误的解释.
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有