正则表达式在第一个单词后用空格替换制表符

时间:2017-04-28 15:03:25

标签: regex

我设法用空格替换所有标签。 发现:\ t 替换:空格

从第一个单词开始,我无法完成这项工作,并忽略该行开头的任何标签/空格。

在这个example中,我设法将行与第一个单词一起隔离,但是我现在如何用单个空格替换所有单独的选项卡(味道是Python)?

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:1)

在Python中,您可以捕获字符串的不同部分,并使用lambda表达式操纵re.sub内的捕获组内容:

import re
s = """         s_Tmp   = 'ERROR: month "' | s_Month                 |       '" not valid - ABORT' | CHAR(13) | CHAR(10) ;"""
res = re.sub(r"^(\s*)(.*)", lambda x: "{}{}".format(x.group(1), x.group(2).replace("\t", " ")), s, flag=re.S)
print(res)
# =>        s_Tmp  = 'ERROR: month "' | s_Month       |   '" not valid - ABORT' | CHAR(13) | CHAR(10) ;

请参阅Python demo

注意我将re.S标志传递给正则表达式编译器,以便(.*)(第二个捕获组可以在最初的0+空格之后匹配整个字符串的其余部分(匹配并捕获到第1组中) (\s*))。

<强>详情:

  • ^ - 字符串的开头
  • (\s*) - 第1组捕获任何0+空白
  • (.*) - 第2组:字符串结尾的任何0+字符。

处理在lambda x: "{}{}".format(x.group(1), x.group(2).replace("\t", " "))内完成:制表符仅替换为Group 2值中的空格。