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



>我有一个巨大的字符串,其中包含诸如"\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

您可以在所有"\"上拆分,然后使用正则表达式通过添加前导"\"来替换您的情绪

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}匹配(后面有 4 个十六进制字母的 u(

使用正则表达式子,您可以将每场比赛替换为前导\

如果您的字符串以 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()])

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

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

O输出:

\进展 \u201d

你可以

像这样简单

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

在这里,您只需将最后一个字符替换为任何内容

最新更新