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

时间:2018-08-15 12:08:05

标签: python regex

我想创建一个仅从字符串和数字中获取单词的正则表达式函数。

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

但是当我执行

get_name('Silverbullet201')

它仍然给我

'Silverbullet201.58'

我以为我的函数只能匹配单词,逗号,撇号和空格。

3 个答案:

答案 0 :(得分:3)

\w既包含字母,数字,也包含下划线,因此,如果您对单词的定义是一串字母,则应该简单地与[A-Za-z]+匹配:

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

答案 1 :(得分:1)

如果只期望单词(字母),则\w的用法不正确,它也与数字和下划线匹配。

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

也许就是您想要的。

答案 2 :(得分:0)

\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. 任何非数字字符