我有一个包含类似内容的文件
#comment
#comment
不是评论#comment
#comment
不是评论
我试图逐行读取文件,只捕获不以#开头的行.我的代码/正则表达式出了什么问题?
import re
def read_file():
pattern = re.compile("^(?<!# ).*")
with open('list') as f:
for line in f:
print pattern.findall(line)
Run Code Online (Sandbox Code Playgroud)
原始代码捕获所有内容而不是预期.
Iro*_*ist 13
另一种简单的方法是仅检查char您读取的每行中的第一行是否包含#字符:
def read_file():
with open('list') as f:
for line in f:
if not line.lstrip().startswith('#'):
print line
Run Code Online (Sandbox Code Playgroud)
Mik*_*ton 11
铁拳显示你应该这样做的方式; 但是,如果你想知道你的正则表达式有什么问题,应该是这样的:
^[^#].*
Run Code Online (Sandbox Code Playgroud)
说明:
^ - 匹配行的开头.[^#]- 匹配不是的东西#.[^...]是你怎么说不匹配的东西(只需替换...你不想匹配的任何字符.例如,[^ABC123]将匹配一个不是A,B,C,1,2或3的字符.不要让^这表示一行/字符串的开头让你感到困惑.这两者^完全无关..* - 匹配零或更多的其他东西.编辑:
原因^(?<!# ).*是不区分# comment和not a comment是在当前位置之前(?<!#)检查文本.引擎在字符串开始后的第一个符号之前查找,并且因为在字符串开始之前没有,所以任何行都与子模式匹配.要真正检查第一个符号是否是,您只需要使用正则表达式.或者,如果可以有前导空格,.##.*#^#.*^\s*#
| 归档时间: |
|
| 查看次数: |
12934 次 |
| 最近记录: |