>我有一个巨大的字符串,其中包含诸如"\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],'')
在这里,您只需将最后一个字符替换为任何内容