簡體   English   中英

正則表達式替換特殊字符在 JS 和 Python 中給出不同的結果

[英]Regex Replace Special Characters gives different results in JS and Python

我正在嘗試使用正則表達式替換所有特殊字符並在 JavaScript (node.js v10.16.3)和 Python (3.7.x)之間進行比較

\t kickref, first really multi-level referral program on the сrypto market, has reached over 20 000 users just in 2 days after its start on september 28.

將句子拆分為字符只是為了查看 ASCII 代碼給了我這個字符數組

'["\\t"," ","k","i","c","k","r","e","f",","," ","f","i","r","s","t"," ","r","e","a","l","l","y"," ","m","u","l","t","i","-","l","e","v","e","l"," ","r","e","f","e","r","r","a","l"," ","p","r","o","g","r","a","m"," ","o","n"," ","t","h","e"," ","с","r","y","p","t","o"," ","m","a","r","k","e","t",","," ","h","a","s"," ","r","e","a","c","h","e","d"," ","o","v","e","r"," ","2","0"," ","0","0","0"," ","u","s","e","r","s"," ","j","u","s","t"," ","i","n"," ","2"," ","d","a","y","s"," ","a","f","t","e","r"," ","i","t","s"," ","s","t","a","r","t"," ","o","n"," ","s","e","p","t","e","m","b","e","r"," ","2","8","."]'

這將是每個字母的 ASCII 碼

'[9,32,107,105,99,107,114,101,102,44,32,102,105,114,115,116,32,114,101,97,108,108,121,32,109,117,108,116,105,45,108,101,118,101,108,32,114,101,102,101,114,114,97,108,32,112,114,111,103,114,97,109,32,111,110,32,116,104,101,32,1089,114,121,112,116,111,32,109,97,114,107,101,116,44,32,104,97,115,32,114,101,97,99,104,101,100,32,111,118,101,114,32,50,48,32,48,48,48,32,117,115,101,114,115,32,106,117,115,116,32,105,110,32,50,32,100,97,121,115,32,97,102,116,101,114,32,105,116,115,32,115,116,97,114,116,32,111,110,32,115,101,112,116,101,109,98,101,114,32,50,56,46]'

特別重要的問題是由於單詞crypto中的字母“c”。 注意它的 ASCII 碼在數組中是 1089

在 JS 中,我替換正則表達式的代碼如下所示

const regexSpecialCharacters = new RegExp(/\W/, 'g');
text.replace(regexSpecialCharacters, ' ');

這產生以下句子

kickref  first really multi level referral program on the  rypto market  has reached over 20 000 users just in 2 days after its start on september 28 

字母 c 被刪除在 Python 中,我的正則表達式做同樣的事情看起來像這樣

import re
regex_special_characters = re.compile(r'\W')
regex_special_characters.sub(' ', text)

這給了我以下 output

kickref  first really multi level referral program on the сrypto market  has reached over 20 000 users just in 2 days after its start on september 28 

這里的字母 c 沒有在 Python 中刪除

с是一個西里爾字母。 Python 3 中的\W默認情況下可識別 Unicode,但在 JavaScript 中不存在。

要在 Python 中也將其刪除,請將re.ASCII作為標志傳遞:

import re
regex_special_characters = re.compile(r'\W', re.ASCII)
regex_special_characters.sub(' ', text)

re.ASCII文檔中的更多詳細信息:

使\w\W\b\B\d\D\s\S執行僅 ASCII 匹配,而不是完整的 Unicode 匹配。 這僅對 Unicode 模式有意義,對於字節模式將被忽略。 對應於內聯標志(?a)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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