【问题标题】:Regex to replace tabs with spaces after first word正则表达式在第一个单词后用空格替换制表符
【发布时间】:2017-04-28 15:03:25
【问题描述】:

我设法用空格替换了所有制表符。 查找:\t 替换:空格

从第一个单词开始并忽略行首的任何制表符/空格时,我无法完成这项工作。

在这个example 中,我设法从第一个单词开始隔离该行,但是我现在如何用单独的空格替换所有单独的选项卡(风格是 Python)?

最好的问候,

【问题讨论】:

  • 你的正则表达式是什么
  • ^\s*([\w]+.*$),另见问题中提到的“示例”链接。
  • 那么,我的回答能解决你的问题吗?
  • 是的,谢谢。

标签: regex


【解决方案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+ 空格之后的整个其余字符串(匹配并使用(\s*) 捕获到组1) .

详情

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2021-07-04
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多