Python .replace()函数,以某种方式删除反斜杠

时间:2019-04-03 08:10:13

标签: python

我有一个巨大的字符串,其中包含“ \ u201d”,“ \ advance \”之类的情感

我所需要做的就是删除斜线,以便:

- \u201d = \u201d
- \united\ = united

(因为它破坏了将其上传到BigQuery数据库的过程)

我知道应该以这种方式:

string.replace('\','') But not sure how to keep \u201d emotions.

附加: Unicode情感示例

  • \ ud83d \ udc9e
  • \ u201c
  • \ u2744 \ ufe0f \ u2744 \ ufe0f \ u2744 \ ufe0f

4 个答案:

答案 0 :(得分:1)

如果您的字符串以\u开头并且至少包含一位数字,则只需在替换后在字符串前面添加反斜杠即可。

import re

def clean(s):

    re1='(\\\\)' # Any Single Character "\"
    re2='(u)'    # Any Single Character "u"
    re3='.*?'    # Non-greedy match on filler
    re4='(\\d)'  # Any Single Digit

    rg = re.compile(re1+re2+re3+re4,re.IGNORECASE|re.DOTALL)
    m = rg.search(s)

    if m:
        r = '\\'+s.replace('\\','')
    else:
        r = s.replace('\\','')
    return r


a = '\\u123'
b = '\\united\\'
c = '\\ud83d'

>>> print(a, b, c)
\u123 \united\ \ud83d

>>> print(clean(a), clean(b), clean(c))
\u123 united \ud83d

当然,如果同一行中有多个条目,则必须拆分字符串:

string = '\\u123 \\united\\ \\ud83d'
clean_string = ' '.join([clean(word) for word in string.split()])

答案 1 :(得分:1)

您可以对所有'\'进行分割,然后使用正则表达式通过添加前导'\'来代替情绪

s = '\\advance\\\\united\\ud83d\\udc9e\\u201c\\u2744\\ufe0f\\u2744\\ufe0f\\u2744\\ufe0f'
import re
print(re.sub('(u[a-f0-9]{4})',lambda m: '\\'+m.group(0),''.join(s.split('\\'))))

由于您的情感是'u'和4个十六进制数字,'u[a-f0-9]{4}'将使它们全部匹配,并且您只需添加前导反斜杠

首先,使用''.join(s.split('\\'))s.replace('\\')删除字符串中的每个'\'

然后我们将每个“情感”与正则表达式u[a-f0-9]{4}匹配(您是u,后面是4个十六进制字母)

然后使用regex子,将所有匹配项替换为前导\\

答案 2 :(得分:0)

您可以使用以下简单方法替换字符反斜杠的最后一次出现: 检查代码并使用此方法。

def replace_character(s, old, new):
    return (s[::-1].replace(old[::-1],new[::-1], 1))[::-1]

replace_character('\advance\', '\','')
replace_character('\u201d', '\','')

输出:

  

\ advance   \ u201d

答案 3 :(得分:0)

您可以像这样简单

text = text.replace(text[-1],'')

在这里,您只需将最后一个字符替换为空