python正则表达式不起作用

时间:2016-03-16 15:24:34

标签: python regex

我有这个android logcat的日志:

“找不到类android.app.Notification $ Action $ Builder,从方法b.a引用”

我正在尝试在python中应用正则表达式来提取android.app.Notification $ Action $ Builder和b.a。

我使用此代码:

regexp = '\'([\w\d\.\$\:\-\[\]\<\>]+).*\s([\w\d\.\$\:\-\[\]\<\>]+)'
match = re.match(r'%s' % regexp, msg, re.M | re.I)

我在线测试了正则表达式,它按预期工作,但它在python中永远不会匹配。有人可以给我一些建议吗?

谢谢

1 个答案:

答案 0 :(得分:1)

re.match()仅在字符串的开头匹配。请改为使用re.search(),请参阅match() vs. search()

请注意,您似乎误解了原始字符串文字是什么; r'%s' % string不会产生特殊的,不同的对象。 r'..'只是符号,它仍会生成常规字符串对象。改为将r放在原始字符串文字上(但如果使用双引号,则不需要引用包含的单引号):

regexp = r"'([\w\d\.\$\:\-\[\]\<\>]+).*\s([\w\d\.\$\:\-\[\]\<\>]+)"

对于这个特定的正则表达式,它对所产生的模式并不重要。

请注意,该模式实际上并未捕获您要捕获的内容。除了一开始就转发的'(在 )要求点和美元作为名称的一部分。因此,您可以捕获Couldb.a,而不是正则表达式中的第一个和最后一个单词。

我会在单词classmethod上锚定,并且可能要求在类名中加点:

regexp = r'class\s+((?:[\w\d\$\:\-\[\]\<\>]+\.)+[\w\d\$\:\-\[\]\<\>]+).*method ([\w\d.\$\:\-\[\]\<\>]+)'

演示:

>>> import re
>>> regexp = r'class\s+((?:[\w\d\$\:\-\[\]\<\>]+\.)+[\w\d\$\:\-\[\]\<\>]+).*method ([\w\d.\$\:\-\[\]\<\>]+)'
>>> msg = "Could not find class android.app.Notification$Action$Builder, referenced from method b.a"
>>> re.search(regexp, msg, re.M | re.I)
<_sre.SRE_Match object at 0x1023072d8>
>>> re.search(regexp, msg, re.M | re.I).groups()
('android.app.Notification$Action$Builder', 'b.a')