Python 在字符串中的特定位置用选项卡搜索并替换空格

Python 在字符串中的特定位置用选项卡搜索并替换空格,python,Python,我需要一些帮助,用多个空格的字符串上的制表符替换空格。 我需要在字符串中搜索时间格式,如08:20:10,并用制表符替换末尾的空格。 我的代码如下: alert = '9/14/2016 08:20:10 CH1 This is a test.' str = re.sub (r'(/d{2}:\d{2}:\d{2})(\s)$', '\t', alert) 我在这项努力中失败了。输出应该如下所示: 9/14/2016 08:20:10 CH1 This is a test. 我做错了什

我需要一些帮助,用多个空格的字符串上的制表符替换空格。 我需要在字符串中搜索时间格式,如08:20:10,并用制表符替换末尾的空格。 我的代码如下:

alert = '9/14/2016 08:20:10 CH1 This is a test.'
str = re.sub (r'(/d{2}:\d{2}:\d{2})(\s)$', '\t', alert)
我在这项努力中失败了。输出应该如下所示:

9/14/2016 08:20:10    CH1 This is a test.

我做错了什么?

首先,不要命名变量
str
,因为这会掩盖该名称的内置函数

第二,我不认为这里需要正则表达式。只需
拆分
字符串,然后根据需要重新加入

>>> alert = '9/14/2016 08:20:10 CH1 This is a test.'
>>> l = alert.split()
>>> new_alert = ' '.join(l[:2]) + '\t' + ' '.join(l[2:])
>>> new_alert
'9/14/2016 08:20:10\tCH1 This is a test.'
您还可以通过引用替换子字符串中捕获的组来修复原始表达式(并将
/
固定为
\
):

不带行终止符的正向后视如何:

>>> import re
>>>
>>> re.sub(r'(?<=\d{2}:\d{2}:\d{2})\s', '\t', alert)
'9/14/2016 08:20:10\tCH1 This is a test.'
>>>
>>> print(_)
9/14/2016 08:20:10      CH1 This is a test.
>>重新导入
>>>

>>>re.sub(r’(?将要在表达式中修复的东西组合在一起:

  • /d
    应该是
    \d
  • 不需要字符串结尾匹配
    $
此外,我会使用一个组而不是一个捕获组:

(?<=\d{2}:\d{2}:\d{2})\s

(?>>print(re.sub(r')(?)这是一个非常具体的问题;如果格式与给定的格式完全相同,它就可以工作,但是它解决了一个非常不同的问题,恰好与指定的问题重叠,这使得未来的维护人员无法了解真正的目标。正则表达式说“将时间戳后的空间更改为选项卡”;这段代码说“将第三次运行的空格更改为选项卡(哦,将所有运行的空格更改为单个空格,同时删除前导空格和尾随空格;希望这不是问题)"我不是ReGEX过度使用的爱好者,但我认为这是一种比疾病更糟糕的治疗方法。@ StaveRanger--就维修性而言,我看了一眼ReGEX并立即决定不想维护它,宁愿使用没有ReGEX的解决方案。没那么糟,所以我在编辑中修改了它。是的,我在第一个数字的/d上粗手指了一下。谢谢,这很有效。@mcristan没问题。我想这一定是打字错误
(?<=\d{2}:\d{2}:\d{2})\s
>>> print(re.sub(r'(?<=\d{2}:\d{2}:\d{2})\s', '\t', alert))
9/14/2016 08:20:10  CH1 This is a test.