簡體   English   中英

Python3正則表達式未將\\“更改為”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM