我正在尝试使用python解析文件中的数据列表 - 但是我不想提取任何已注释掉的数据。数据结构的一个例子是:
#commented out block
uncommented block
# commented block
我正在尝试仅检索中间项目,因此我尝试在开始时排除带有哈希的项目。问题是一些哈希值直接在注释项目旁边,有些哈希值,并且我目前只有在上面第一个例子中注释了项目时才能使用表达式 -
(?<!#)(commented)
我尝试将\ s +添加到否定前瞻但后来我抱怨表达式没有明显的最大长度。有没有办法做我想做的事情?
提前致谢,
丹
答案 0 :(得分:6)
为什么要使用正则表达式?字符串方法就可以了:
>>> s = """#commented out block
uncommented block
# commented block
""".splitlines()
>>> for line in s:
not line.lstrip().startswith('#')
False
True
False
答案 1 :(得分:4)
正如SilentGhost所指出的那样,正则表达式并不是解决这个问题的最佳方法,但我认为我会解决背后的负面看法。
你想过这样做:
(?<!#\s+)(commented)
这不起作用,因为背后的外观需要有限的长度。你可以这样做:
(?<!#)(\s+commented)
这会匹配您想要的行,但当然,您必须从注释组中删除空格。再一次,字符串操作对于你正在做的事情来说更好,但是我想展示一下自从你提出要求后,负面看起来是如何工作的。
答案 2 :(得分:0)
>>> s = """#commented out block
... uncommented block
... # commented block
... """
>>> for i in s.splitlines():
... if not i.lstrip().startswith("#"):
... print i
...
uncommented block