Python正则表达式匹配非ASCII名称

4

我正在尝试使用re模块验证名称字段。

\w无法匹配非ASCII字符,例如à

在许多其他正则表达式引擎中,解决方案似乎是\p{L},但是似乎Python不支持这一点。有什么合适的替代方法吗?

更新:

与此主题相关的其他问题不同,因为我正在寻找Unicode替代\w,而不是使用默认的re.UNICODE标志获得的替代(因为此标志还使\w匹配数字和下划线)。


1
你是否正在使用LOCALE和/或UNICODE标志? - BrenBarn
是的,每个 re.<function> 都有一个 flags 参数。 - dmg
请参见https://dev59.com/vUXRa4cB1Zd3GeqPtJyd,了解类似(重复?)的问题。 - Michael Scott Asato Cuthbert
@BrenBarn 我已经尝试了 re.UNICODE 但它不适用,因为它也匹配数字和下划线。 - GJ.
1
@GJ:针对您的更新:所指出的重复项是“我还需要一个不匹配数字的正则表达式。”那么下划线处理是唯一的区别吗? - quetzalcoatl
\w 匹配数字和下划线,无论是否设置了UNICODE标志。 - Peter Graham
4个回答

1
我认为您需要为字符类启用Unicode支持,使用UNICODE修饰符。
regexRef = re.compile("\w", re.UNICODE)

看看这是否有助于匹配那些非ASCII字符。


1
re.UNICODE并不能解决这个问题,因为它也会匹配数字和下划线。 - GJ.

1

[^\d\s_]是否符合您的要求?


1

[^\W0-9_] 在使用 re.UNICODE 时对我有效。


@quetzalcoatl 谢谢你提供的参考,这个东西在其中一个部分表单里隐藏着。 - GJ.

0

将 Unicode 字符串传递给 re 模块并启用 re.UNICODE 标志,例如:

# -*- coding: utf-8 -*-
import re

print(re.findall(ur"\w+", ur"\w does match à.", flags=re.UNICODE))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接