匹配任何语言的字母

Baz*_*Baz 16 python regex unicode

如何在python 3中使用正则表达式匹配任何语言的字母?

re.match([a-zA-Z]) 将匹配英语字符,但我希望同时支持所有语言.

我不希望匹配'in can't或underscores或任何其他类型的格式.我真希望我的正则表达式匹配:c,a,n,t,Å,é,和?.

tch*_*ist 20

对于Python中的Unicode正则表达式,我强烈推荐以下内容:

  1. 使用Matthew Barnett的regex而不是标准re,它不适合Unicode正则表达式.
  2. 仅使用Python 3,而不使用Python 2.您希望所有字符串都是Unicode字符串.
  3. 仅使用带有逻辑/抽象Unicode代码点的字符串文字,而不是编码字节字符串.
  4. 在您的流上设置您的编码并忘记它.如果你发现自己曾经手动打过电话.encode,那么你几乎肯定会做错事.
  5. 只使用宽泛的构建,其中代码点和代码单元是相同的,从来都不是一个狭窄的构建 - 你可能会考虑弃用Unicode健壮性.
  6. 在途中将所有传入的字符串规范化为NFD,然后在出路时将NFC规范化.否则你无法获得可靠的行为.

一旦你这样做,你可以放心地编写模式,包括\w\p{script=Latin}\p{alpha}\p{lower}等,并知道这些都将做什么Unicode标准说,他们应该.我在这个答案中更详细地解释了Python Unicode正则表达式业务的所有这些业务.简短的故事是永远regex不要使用re.

对于一般的Unicode建议,我还有上一次OSCON关于Unicode正则表达式的几个讨论,除了第三个谈话之外,其中大部分都不是关于Python的,但其中大部分都是适应性的.

最后,总有这样的答案可以将对上帝(或至少是Unicode)的恐惧放在心里.


Bjö*_*ist 7

使用\ w特殊序列有什么问题?

# -*- coding: utf-8 -*-
import re
test = u"can't, Å, é, and ?ABC"
print re.findall('\w+', test, re.UNICODE)
Run Code Online (Sandbox Code Playgroud)

  • `\w` 也匹配数字 `[0-9]` 和下划线 `_` (2认同)