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))