Python3正则表达式没有改变\"到"

时间:2017-10-18 23:49:31

标签: python json regex python-3.x pandas

我有一个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")虽然我的经验有限并且一直都失败,所以正则表达式是我最好的选择

1 个答案:

答案 0 :(得分:1)

噢,我错过了熊猫提示,所以pandas替换 使用正则表达式。但是,要清楚,str.replace不适用于正则表达式。 re.sub确实如此。

现在

  • 匹配单个反斜杠,您的正则表达式为:"\\"
  • 用于描述正则表达式的字符串:"\\\\"
  • 使用原始字符串时,双反斜杠就足够了:r'\\'

如果您的字符串确实\之前包含",那么正则表达式就是:

\\(?=\")

为您的"做了预测(查看regex101)。

你必须使用类似的东西:

re.sub(r'\\(?=\")',"",s,0)

或使用该正则表达式的pandas等效物。