Python中用re.sub()替换Unicode字面空格的代码是否正确?
关于Unicode空白字符替换的正则方案验证
你的代码是正确有效的:你列出的这些Unicode字符确实都是各类非标准空白(比如示例里的特殊空格就是
\u2009窄空格),用正则字符集匹配后替换成普通空格,完全能解决你遇到的问题。更简洁的替代写法:Python正则支持Unicode属性类,用
\p{Zs}可以匹配所有Unicode空格分隔符,结合你需要处理的控制类空白,写法更精简:import re x = "Significant increases in all the lipoprotein fractions were observed in infected untreated mice compared with normal control mice. Treatment with 100 and 250 mg/kg G. lucidum extract produced significant reduction in serum total cholesterol (TC) and low-density cholesterol (LDL-C) contents compared with 500 mg/kg G. lucidum and CQ." # 匹配所有Unicode空格分隔符+指定控制类空白 x = re.sub(r'[\x0b\x0c\x1c\x1d\x1e\x1f\x85\u2028\u2029\p{Zs}]', " ", x, flags=re.UNICODE)说明:
\p{Zs}已经包含了你列出的\xa0\u1680\u2000-\u200a\u202f\u205f\u3000这些空格字符,能覆盖绝大多数非标准空白场景。额外注意:如果文本里有需要保留的换行符(
\n)、制表符(\t),要避免误替换——上面的写法特意避开了这些常规空白。如果连制表符也想换成普通空格,可以直接用\s,但要保留换行的话,可改用[^\S\n]来匹配除了换行和非空白外的所有空白字符。
内容的提问来源于stack exchange,提问作者small tomato
相关产品推荐
相关产品推荐

