0

我正在尝试在 python 脚本中捕获来自串行的数据。流以“#”结尾,流可以包含字母、数字、许多其他特殊字符和换行符。我想捕获所有字符并在完成后将它们放入一个文件中。但是,我不确定我的 re 是否正确。是

re.match("[A-Za-z0-9,.$:<>&*=-]", char, re.DOTALL)

要捕获所有字母、数字和,.$:<>&*=-字符以及换行符吗?我可以简单地添加遇到的每个字符,将它放在一个列表中,然后像这样编写列表 ta 文件:

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()

目前它正在抓住我所期望的一切,但它似乎没有抓住新行,因为结果文件不包含任何......

4

1 回答 1

1

即使您使用的是re.DOTALL,您的正则表达式实际上并没有使用点运算符。将第 7 行更改为以下内容应该可以按预期工作:

if re.match("[A-Za-z0-9,.$:<>&=-]|\n", char):

适用于基于 *nix 和基于 PC 的换行编码,\r正则表达式将简单地忽略它。

于 2012-12-14T08:15:11.497 回答