Python中查找Unicode范围的补集

3
我有一组单词,想要找到其中包含非意大利字母的单词。与提供不属于意大利语字母的所有可能的unicode字母范围相比,我认为更好的方法是指定允许字母的范围,然后检查字符串是否包含任何不属于这些范围的字符。问题是,我不知道如何告诉Python的re模块寻找这些字符,而且我找不到任何有用的信息。
以下是一个示例:小写拉丁字母的范围为u0061-u007a。如果我运行以下命令: print(re.search("[\u0061-\u007a]",'hello')) 我将获得如下输出: <re.Match object; span=(0, 1), match='h'>,正如预期的那样。
现在让我们向输入字符串中添加一个超出范围的字符,并将其设置为Àhello。我想搜索超出所提供范围的字符。我尝试在范围前面添加'^'字符:
print(re.search("^[\u0061-\u007a]", 'Àhello'))

但是我得到了None作为输出。我希望避免逐个字符地扫描每个字符串。这种情况是否可以避免?


4
在字符集中,^ 用于否定匹配(表示取反),它必须出现在方括号内的第一个字符位置。而如果 ^ 出现在字符集外面,则完全不相关,它意味着将匹配锚定到字符串开头。 - jasonharper
如果您觉得某个答案解决了问题,请点击绿色的勾选标记将其标记为“已接受”。这有助于保持对仍未得到答案的旧SO的关注。 - Jafar Isbarov
1个回答

1

在方括号内放置^符号:

print(re.search("[^\u0061-\u007a]", 'Àhello'))

1
我感觉好蠢。非常感谢! - user14779080
2
正确答案。为了让OP更好地理解问题,方括号内的^表示否定该组。这正是您想要实现的。在正则表达式开头的方括号外面的^定义了匹配必须是字符串的开头才能匹配。您可以在此处检查RegExr示例以查看区别,并在底部的工具箱中获得有关正则表达式的详细说明。 行首:https://regexr.com/6dsen 否定集:https://regexr.com/6dseq - lwohlhart
哦,是的,这曾经是我的一个常见错误。@lwohlhart - Jafar Isbarov

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