我有一个json文件,里面有用户评论(来自网页抓取),我已经用pandas拉入python
import pandas as pd
data = pd.DataFrame(pd.read_json(filename, orient=columnName,encoding="utf-8"),columns=columnName)
data['full_text'] = data['full_text'].replace('^@ABC(\\u2019s)*[ ,\n]*', '', regex=True)
data['full_text'] = data['full_text'].replace('(\\u2019)', "'", regex=True)
data.to_json('new_abc_short.json',orient='records')
消息不会在线完全匹配相应的消息。 (表情符号显示为\ u0234或其他内容,撇号为\ u2019,链接中有正斜杠,而引号则反斜杠。
我想清理它们以便我学习一些正则表达式,所以我可以拉入python,清理它们然后以不同的名称将它们重新保存回json(暂时)(https://docs.python.org/3/howto/regex.html)
第二行有助于删除Twitter句柄(如果它仅存在于开头),然后删除它(如果它被使用)(例如@ ABC' s)。如果开头没有推特句柄(可能在消息中间使用)那么就保留了。然后它删除留下的任何空格和逗号(再次只在字符串的开头) 例如" @ABC,你好"变成"你好"。 "你好@ ABC"保持不变。 " @ ABC的推特很大"会成为"推特很大"
第三行有助于替换无法显示的每个撇号(例如,不要改变回来)
我有成千上万的记录(并非所有记录都有撇号,引号,链接等问题),并且基于我看过的非常小的例子,它们似乎有用
但我的第三个不起作用:
data['full_text'] = data['full_text'].replace('\\"', '"', regex=True)
json中的示例消息:" full_text":" @ABC你怎么能意外关闭\"我的帐户"
我想删除双引号旁边的\所以它看起来像真正的消息(我假设它是一个转义字符,用户显然没有输入)
但无论我做什么,我都无法将其删除
来自我的正则表达式学习,"不是元字符。所以反斜杠也不应该存在。但无论如何,我已经尝试过了:
\\" (which i think should be the obvious one, i have \", no special quirk in " but there is in \ so i need another back slash to escape that)
\\\\" (some forums posts online mention needing 4 slashes
\\\" ( i think someone mention in the forum posts that they got it workin with 3)
\\\(\") (i know that brackets provide groupings so i tried different combinations)
(\\\\")
所有上述表达都用单引号括起来,但它们并没有奏效。我想也许双引号是问题,因为我只有一个,所以我用单引号替换单引号x3
'''\\"'''
但以上都不适用于三重单引号
我不断重新检查新保存的json,我一直在看:
" full_text":"你怎么能意外关闭\"我的帐户" (即删除带有空间的@ABC,但不能删除反斜杠位)
最初,我试图转换这些unicode问题,即使用encoding =" utf-8")虽然我的经验有限并且一直都失败,所以正则表达式是我最好的选择
答案 0 :(得分:1)
噢,我错过了熊猫提示,所以pandas替换 使用正则表达式。但是,要清楚,str.replace不适用于正则表达式。 re.sub确实如此。
现在
"\\"
"\\\\"
r'\\'
如果您的字符串确实在\
之前包含"
,那么正则表达式就是:
\\(?=\")
为您的"
做了预测(查看regex101)。
你必须使用类似的东西:
re.sub(r'\\(?=\")',"",s,0)
或使用该正则表达式的pandas等效物。