我有这个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中永远不会匹配。有人可以给我一些建议吗?
谢谢
答案 0 :(得分:1)
。re.match()
仅在字符串的开头匹配。请改为使用re.search()
,请参阅match()
vs. search()
。
请注意,您似乎误解了原始字符串文字是什么; r'%s' % string
不会产生特殊的,不同的对象。 r'..'
只是符号,它仍会生成常规字符串对象。改为将r
放在原始字符串文字上(但如果使用双引号,则不需要引用包含的单引号):
regexp = r"'([\w\d\.\$\:\-\[\]\<\>]+).*\s([\w\d\.\$\:\-\[\]\<\>]+)"
对于这个特定的正则表达式,它对所产生的模式并不重要。
请注意,该模式实际上并未捕获您要捕获的内容。除了一开始就转发的'
(在 )要求点和美元作为名称的一部分。因此,您可以捕获Could
和b.a
,而不是正则表达式中的第一个和最后一个单词。
我会在单词class
和method
上锚定,并且可能要求在类名中加点:
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')