为什么我的正则表达式函数不起作用?

2024-10-01 22:34:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个正则表达式函数,只从一串单词和数字中获取单词。你知道吗

def get_name(text):
    return re.findall("([\w,'\s]+)",text)[0] 

但当我执行

get_name('Silverbullet201')

它仍然给我

'Silverbullet201.58'

我认为我的函数只能匹配单词、逗号、撇号和空格。你知道吗


Tags: 函数textnameregetreturndef数字
3条回答

\w将匹配字母和数字。应该使用[a-zA-Z]只包含字母。你知道吗

def get_name(text):
    return re.findall("([a-zA-Z]+)",text)[0] 

如果仍要匹配所有特殊字符和空格,可以使用以下选项:

def get_name(text):
    return re.findall("([a-zA-Z,'\s]+)",text)[0]
get_name("Silverbul , 'let' 201.58")

输出:

"Silverbul , 'let' "

不幸的是,您不能使用[\w\D],因为它将使用OR比较,而不是AND。实际上,如果以下任何一项为真,您将说match:

  1. 任何字母、数字或下划线
  2. 任何非数字字符

如果您只需要单词(字母),那么\w的用法是不正确的,它还匹配数字和下划线。你知道吗

def get_name(text):
    return re.findall(r"([A-Za-z]+)",text)[0]

也许是你想要的。你知道吗

\w既包括字母和数字,也包括下划线,因此如果您对单词的定义是一个字母字符串,那么您只需与[A-Za-z]+匹配即可:

def get_name(text):
    return re.findall(r'[A-Za-z]+', text)[0]

相关问题 更多 >

    热门问题