我正在尝试捕获python脚本中串行数据。流以“#”结尾,流可以包含字母,数字,许多其他特殊字符和新行。我想捕获所有字符并在完成后将它们放在一个文件中。但是,我不确定我的答案是否正确。是
re.match("[A-Za-z0-9,.$:<>&*=-]", char, re.DOTALL)
将捕获所有字母,数字和,.$:<>&*=-
字符以及换行符?我可以简单地添加每个字符串,将其放在列表中,然后将列表写入如下文件:
while 1:
# must handle 'exceptions' - IE blank data....
try:
if s.inWaiting():
val = s.read(s.inWaiting())
for char in val:
if re.match("[A-Za-z0-9,.$:<>&=-]", char, re.DOTALL):
chunk += char
print char
# handle end of stream
#if char is '#':
if re.match("#", char):
f = open('./report', 'w')
f.write(chunk)
sys.exit()
目前它正在抓住我所期望的所有内容,但它似乎没有抓住新行,因为生成的文件不包含任何...
答案 0 :(得分:1)
即使您正在使用re.DOTALL
,您的正则表达式实际上并不使用点运算符。将第7行更改为以下内容应该可以正常工作:
if re.match("[A-Za-z0-9,.$:<>&=-]|\n", char):
适用于基于* nix和基于PC的换行编码,\r
只会被正则表达式忽略。