【问题标题】:Insert a backslash before special character in a string using python or shell script使用 python 或 shell 脚本在字符串中的特殊字符之前插入反斜杠
【发布时间】:2022-07-08 00:12:07
【问题描述】:

字符串出现特殊字符时是否可以插入反斜杠?

原始字符串: echo "The string is: Ytds^&4"

预期输出: echo "The string is: Ytds\^\&4"

我可以使用 python 或 shell。

【问题讨论】:

  • 这取决于您认为什么是“特殊”字符。 Python 提供了一个 shlex.quote 函数,它根据 Unix shell 的规则进行转义。
  • 请注意,^ 在非交互式 UNIX shell 上并不特殊;它仅在 Windows 上是特殊的(或打开历史扩展的 shell,但在脚本中默认情况下这是关闭的,因此您无需担心)。
  • 另外,& 在双引号字符串中时,在 UNIX 上不需要转义;引号已经足够转义了。
  • ...那么这里的实际用例是什么?您要求的转义不符合 POSIX;如何进行 Windows 兼容的转义可能应该作为 Windows 特定的问题提出。

标签: python shell


【解决方案1】:

您可以使用.replace() 的手动链,这会很混乱。

你也可以只使用这样的函数:

str_ = "Y^541" 


def change(string: str, characters): 
    for character in characters:
        string = string.replace(character, "\\" + character)
    return string


print(change(str_, "!@#$%^&*()")) # output: Y\^541

参数characters 应该是一个包含所有被认为是特殊字符的字符串,并且它会执行一个循环以用反斜杠替换每个字符。

【讨论】:

    【解决方案2】:

    在 Python 中,以下将产生所需的输出:

    print('The string is: Ytds\^\&4')
    

    这是因为插入符号和 & 号都不是可转义字符,因此反斜杠按字面意思解释给出以下输出:

    The string is: Ytds\^\&4
    

    【讨论】:

    • 我认为 OP 可能会将这个字符串传递给一个函数,其中这些字符具有重要意义,就像在正则表达式中一样,所以他们必须在它之前放一个反斜杠。他们也可能只需要对长字符串执行此操作。
    • @thirdsandfourths 我的回答是基于问题中包含的信息,而不是假设
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2020-03-15
    • 2013-09-26
    • 2021-09-02
    • 2021-08-16
    相关资源
    最近更新 更多