Re.search悬空元字符错误

时间:2014-01-12 19:06:44

标签: python regex python-2.7

好的这一行是,在我的IDE中出现了Pattern Expected:Dangling Metacharacter的错误。

re.search(*.*.*.*, string)

出了什么问题,如何让它发挥作用?

2 个答案:

答案 0 :(得分:0)

您在开头缺少.

re.search('.*.*.*.*', string)

*之前没有任何东西是悬挂的元字符。

这两种模式都没有意义;只需一个'.*'即可匹配所有文字。

如果您要搜索带有文字点的文字,例如,在IP地址中,那么您可以使用:

re.search('\d+\.\d+\.\d+\.\d+', string)

e.g。使用\.匹配文字点。 \d匹配一个数字,+使其匹配1位或更多位数。

强烈敦促您在继续之前阅读regular expression howto

答案 1 :(得分:0)

正如@Martijn Pieters所示,如果你坚持正则表达式,你想要使用它:

re.search('\d+\.\d+\.\d+\.\d+', string)

但是,使用简单的字符串方法也很容易实现。我假设通过尝试匹配4个数字,用句点分隔,你想找到数字是什么。

那个正则表达式是:

pattern = re.compile('(\d+)\.(\d+)\.(\d+)\.(\d+)')

使用pattern.search('255.255.255.255').groups()会产生('255', '255', '255', '255')

所以,它可以满足您的需求。

使用str.split

这是一项更简单的任务

'255.255.255.255'.split('.')会产生['255', '255', '255', '255']

为什么在正则表达式上使用str.split?由于表现:

import re
from timeit import timeit

to_match = '255.255.255.255'
pattern = re.compile('(\d+)\.(\d+)\.(\d+)\.(\d+)')

def regex_split():
    pattern.search(to_match).group()

def string_split():
    to_match.split('.')

print timeit(regex_split) # 1.4148 seconds
print timeit(string_split) # 0.7517 seconds
# note: both call the functions 1 million times

因此,str.split大约占正则表达式的53%。一般规则:如果可以使用字符串方法简单地完成任务(当然,这是相对的),请使用它们而不是正则表达式。