好的这一行是,在我的IDE中出现了Pattern Expected:Dangling Metacharacter的错误。
re.search(*.*.*.*, string)
出了什么问题,如何让它发挥作用?
答案 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%。一般规则:如果可以使用字符串方法简单地完成任务(当然,这是相对的),请使用它们而不是正则表达式。