[英]Python3 regex not changing \“ to ”
我有一個用用戶評論填充的json文件(來自網絡抓取),我已經用熊貓將其拉入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)。 如果開頭沒有Twitter句柄(可能在消息的中間使用),則保留該句柄。 然后它將刪除所有留在后面的空格和逗號(同樣僅在字符串的開頭),例如“ @ABC,hi there”變成“ hi there”。 “嗨,@ ABC”保持不變。 “ @ABC的Twitter很大”將變成“ Twitter很大”
第三行有助於替換所有無法顯示的撇號(例如,不要更改回不顯示)
我有成千上萬的記錄(並非所有記錄都有撇號,引號,鏈接等問題),並且根據我看過的很小的例子,它們似乎可以工作
但是我的第三個不起作用:
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”),盡管我對此的經驗有限並且一直失敗,所以regex是我的最佳選擇
哦,我錯過了熊貓提示,所以熊貓替換確實使用了正則表達式。 但是,很明顯, str.replace與正則表達式不兼容。 重新訂閱 。
現在
"\\\\"
"\\\\\\\\"
r'\\\\'
如果您的字符串確實在"
前包含\\
,則正則表達式將是:
\\(?=\")
這會為您的"
(查找regex101 )做一個前瞻。
您將必須使用類似:
re.sub(r'\\(?=\")',"",s,0)
或使用該正則表達式的等效熊貓。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.