Python正则表达式

Python正则表达式,python,regex,Python,Regex,我必须用python完成这项任务:选择数据框列中不包含一个或多个(小写和大写)字母、空格和句点的所有单词。 我尝试了这段代码,但它告诉我模式不正确: import re countries = gapminder['country'] # Pattern that contains all words that do not satisfied the specification pattern = re.compile('[a-zA-Z \.]+') mask = countries.str.

我必须用python完成这项任务:选择数据框列中不包含一个或多个(小写和大写)字母、空格和句点的所有单词。 我尝试了这段代码,但它告诉我模式不正确:

import re
countries = gapminder['country']
# Pattern that contains all words that do not satisfied the specification
pattern = re.compile('[a-zA-Z \.]+')
mask = countries.str.contains(pattern)
# Select the complement of mask 
invalid_countries = countries[~mask]
print(invalid_countries)

您正在使用
contains
,它将在字符串中的任何位置查找模式。您可能希望使用锚定模式(将
^
放在开头,将
$
放在结尾,以强制整个字符串匹配)来代替
匹配

你可以用

invalid_countries = countries.str.contains(r'^[^a-zA-Z.\s]+$')
正则表达式是
^[^a-zA-Z.\s]+$

  • ^
    -字符串的开头
  • [^a-zA-Z.\s]+
    -1个或多个字符,而不是字母、
    和空格
  • $
    -字符串结束

请查看,我确信问题出在模式中。它使用re.search在字符串中查找表达式。这意味着类似“$$$x$$$”的内容将通过过滤器,因为它包含“x”。这不是你想要的。我直到@WiktorStribiżew向我解释后才得到你的第一个答案,谢谢你。你试过
无效的_countries=countries.str.contains(r'^[^a-zA-Z.\s]+$)
?非常感谢@WiktorStribiżew,是的,它有效!
invalid_countries = countries.str.contains(r'^[^a-zA-Z.\s]+$')