Python 如何找到带有下标的单词?

Python 如何找到带有下标的单词?,python,regex,python-3.x,Python,Regex,Python 3.x,输入:s=“test1这是一个示例下标o₁" 我已经尝试过:re.compile(r'\b[^\W\d.]{2,}\b').findall(s) 它查找包含2个以上字符且不包含数字的单词 'this','is','sample','subscript','o₁', 但它仍然有下标号 有没有办法删除包含下标的单词 期望输出:'this','is','sample','subscript'关键是Python 3正则表达式中支持Unicode的\d不匹配 如果您只需要使用ASCII字母单词,请使用 r

输入:
s=“test1这是一个示例下标o₁"

我已经尝试过:
re.compile(r'\b[^\W\d.]{2,}\b').findall(s)

它查找包含2个以上字符且不包含数字的单词
'this','is','sample','subscript','o₁',

但它仍然有下标号

有没有办法删除包含下标的单词


期望输出:
'this','is','sample','subscript'

关键是Python 3正则表达式中支持Unicode的
\d
不匹配

如果您只需要使用ASCII字母单词,请使用

r'\b[a-zA-Z]{2,}\b'
或者,通过使用
re.A
/
re.ASCII
标志,使模式具有非Unicode意识:

re.compile(r'\b[^\W\d_]{2,}\b', re.A)

如果您需要使用任何Unicode字母,您可以通过将所有
No
字符添加到regex否定字符类(这可能会使其成为一个乏味的解决方案)来修复它,或者在找到匹配项后添加编程检查,以查看匹配项是否包含
No
类别中的任何字符

见:

请确保您使用的是最新的Python版本以支持最新的Unicode标准,或者依赖于:


关键是Python 3正则表达式中支持Unicode的
\d
No
Unicode类别不匹配。您应该“手动”排除它“,将它们添加到否定字符类。补充上面的注释,看一看。基于匹配的字母构建表达式,而不是匹配除
\W\d\u
和其他内容之外的任何内容,这难道不更容易吗?@khelwood
[a-zA-Z]
只匹配ASCII字母
[\W\d\u]
通常用作与正则表达式匹配的任何字母。@WiktorStribiżew,但显然这不会产生正确的结果。ASCII标志:可以在任何容量的答案中使用吗?@deveshkumarsing是的,如果您计划只使用ASCII,请使用
re.A
,或更详细的
[A-Za-z]
正则表达式。
import re, sys, unicodedata
s = "test1 this is a sample subscript o₁"
No = [chr(i) for i in range(sys.maxunicode) if unicodedata.category(chr(i)) == 'No']
print([x for x in re.findall(r'\b[^\W\d_]{2,}\b', s) if not any(y in x for y in No)])
# => ['this', 'is', 'sample', 'subscript']
p = regex.compile(r"\b\p{L}{2,}\b")
print(p.findall(s))