我想使用以下代码仅捕获以两个星号结尾的行:
import re
total_lines = 0
processed_lines = 0
regexp = re.compile(r'[*][\s]+[*]$')
for line in open('testfile.txt', 'r'):
total_lines += 1
if regexp.search(line):
print'Line not parsed. Format not defined yet'
else:
processed_lines += 1
print "Total lines: {} - Processed lines: {}".format(total_lines, processed_lines)
在Windows中运行正常。但是当我在CentOS中使用代码时,正则表达式不起作用。这是testfile.txt
(40行文件)
Windows re.__version__ = '2.2.1'
:
Line not parsed. Format not defined yet
Line not parsed. Format not defined yet
Line not parsed. Format not defined yet
Line not parsed. Format not defined yet
Line not parsed. Format not defined yet
Total lines: 40 - Processed lines: 35
Linux re.__version__='2.2.1'
:
Total lines: 40 - Processed lines: 40
答案 0 :(得分:1)
以通用换行模式rU
打开文件,以支持在python 2.x中具有换行格式不是平台上的本机格式的文件的I / O,然后你的正则表达式中的$匹配EOL。
import re
total_lines = 0
processed_lines = 0
regexp = re.compile(r'[*][\s]+[*]$')
for line in open('testfile.txt', 'rU'):
total_lines += 1
if regexp.search(line):
print'Line not parsed. Format not defined yet'
else:
processed_lines += 1
print "Total lines: {} - Processed lines: {}".format(total_lines, processed_lines)
PEP278解释了rU
代表什么:
在具有通用换行符支持的Python中,打开()模式参数 也可以是“U”,意思是“打开输入作为具有通用性的文本文件 新线解释“。模式”rU“也是允许的,用于对称 “RB”。
答案 1 :(得分:-1)
您提供的测试文件中是否包含以两个星号结尾的任何行?
此正则表达式应匹配以两个星号结尾的所有行:
。* \ * {2} $