请教一个 Python 正则问题,相同代码运行出来结果不一样了

2021-07-06 09:52:48 +08:00
 karlxu
datay='Python 是很受欢迎的编程语言 Python'
pattern9='[a-zA-Z]+' #字符集的范围 + 号 代表 前导字符模式出现 1 次以上
res=re.sub(pattern9,'Java',datay)
print(res)

datas='Python 是很受欢迎的编程语言 Python'
pattern1='\w+'
ww=re.sub(pattern1,'java',datas) #sub 不能用 group()函数,因为返回的是一个元组
print(ww)


上面这段在 Python2.7 运行后 print 是一致的:


但是在 Python3.9 运行后是不一样的:


为什么第二种方法出来的结果只是 java,连中文部分都没有了?
1686 次点击
所在节点    Python
3 条回复
ThirdFlame
2021-07-06 10:01:22 +08:00
显然是 python3 \w 的含义 于 py2 的不太一样了啊。 (当然也可能是编码的问题)
Sylv
2021-07-06 10:05:52 +08:00
\w 在 Python 2 里默认只匹配字母或数字或下划线,在 Python 3 里会也匹配包括中文在内的 Unicode 字符。具体请阅读文档。
Rache1
2021-07-06 11:37:15 +08:00
见维基百科「正则表达式」词条。

\w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。注意 Unicode 正则表达式会匹配中文字符。


在 Python3 中,所有字符串都使用 Unicode 表示,所以表现为这样,同样 C# 也是这样,php 中的 mb_ereg 也是

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/787783

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX