带有正则表达式的Python str.strip()过滤意外字符

发布于 2021-01-29 15:00:54

我遇到了一个我希望很简单的问题,但是我碰到了要解决的问题。我正在尝试从文件中每行的开头剥离DateTime时间戳,但是返回的信息切断了一些我想保留的字符。我相当确定我的regex可以,并且基于regex.group()输出,它看起来不错。我发现带有字母“
c”和“ e”的行似乎可以删减其字符,而其他行则按预期工作。

Python 2.7.6(默认,2015年6月22日,17:58:13)

linux2上的[GCC 4.8.2]

>>> import re
>>>
>>> line2 = '[Wed Dec 01 10:24:24 2010] ceeeeest'
>>> a = re.match(r'(\[[A-Za-z]{3}\s)?([A-Za-z]{3})(\s+)([0-9]{1,4})(\s+)([0-9]{2})(:)([0-9]{2})(:)([0-9]{2})(\s[0-9]{1,4})?(\])?', line2, re.I)
>>> a.group()
'[Wed Dec 01 10:24:24 2010]'
>>> a.groups()
('[Wed ', 'Dec', ' ', '01', ' ', '10', ':', '24', ':', '24', ' 2010', ']')
>>> b = a.group()
>>> b
'[Wed Dec 01 10:24:24 2010]'
>>> c = line2.strip(b)
>>> c
'st'
>>>

我希望C是“最真诚的”

要么

>>> line = '[Wed Dec 01 10:24:24 2010] testc'
>>> a = re.match(r'(\[[A-Za-z]{3}\s)?([A-Za-z]{3})(\s+)([0-9]{1,4})(\s+)([0-9]{2})(:)([0-9]{2})(:)([0-9]{2})(\s[0-9]{1,4})?(\])?', line, re.I)
>>> a.group()
'[Wed Dec 01 10:24:24 2010]'
>>> a.groups()
('[Wed ', 'Dec', ' ', '01', ' ', '10', ':', '24', ':', '24', ' 2010', ']')
>>> b = a.group()
>>> c = line.strip(b)
>>> c
'test'
>>>

我希望c是“ testc”

我在这里缺少一些非常基本的东西吗?请赐教。谢谢。

关注者
0
被浏览
70
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    该方法str.strip将从字符串的开头和结尾删除参数中的所有字符。您可能想使用它str.replace

    >>> line = '[Wed Dec 01 10:24:24 2010] testc'
    >>> line.replace('[Wed Dec 01 10:24:24 2010]', '')
    ' testc'
    

    您可以使用来消除前导空格str.lstrip,也可以使用str.strip来消除尾随空格(默认参数是空格)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看