【问题标题】:How to replace two or more underscore using python?如何使用python替换两个或多个下划线?
【发布时间】:2020-04-22 14:41:49
【问题描述】:

对于机器学习来说,我需要“清理”一些我正在提取的文本,所以我尝试了这个:

texto = "sdf sdf s _ sfsf sdfs _________ sfsdf"
texto = texto.replace(r"_{2,}"," ")
print(texto)

但结果不是预期的:

sdf sdf s _ sfsf sdfs _________ sfsdf

我想要:

sdf sdf s _ sfsf sdfs  sfsdf

【问题讨论】:

  • str.replace(...) 不包含正则表达式,您需要re 模块。
  • 在您的尝试中,您似乎将下划线字符替换为一个空格,但在预期结果中,您显示了将下划线替换为空字符串的结果,因为似乎有两个空格在sdfssfsdf 之间,这将是使用空字符串作为替换的结果。那么你为什么不直接用英语说你想要完成的事情呢?
  • 你只关心下划线字符?如果还有其他重复的字符,你希望它们如何处理?

标签: python regex replace


【解决方案1】:

你可以使用

import re
texto = "sdf sdf s _ sfsf sdfs _________ sfsdf"
rx = re.compile(r'_{2,}')

texto = rx.sub('', texto)

产量

sdf sdf s _ sfsf sdfs  sfsdf

如果您也想替换尾随空格,请将表达式更改为

rx = re.compile(r'_{2,}\s*')

那么输出将是

sdf sdf s _ sfsf sdfs sfsdf
#                   ^^^

【讨论】:

    【解决方案2】:

    我会尝试像这样删除 3 个连续的下划线:

    texto = texto.replace(r"___","")

    【讨论】:

    • 那么 5, 8, 11, ... 连续的下划线呢?你最终会在这里有两个下划线。
    • OP 想要删除“两个或多个下划线”。您的解决方案正确删除了 3,但没有删除 2、4、5、7 等(任何不是 3 的倍数的)。需要使用正则表达式的解决方案。
    • 对于任何自定义用例,例如有序列的地方,您必须为特定的字符串格式编写正则表达式
    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多