python正则表达式没有';行不通
我有这个android logcat的日志: 找不到从方法b.a引用的类android.app.Notification$Action$Builder 我试图用python中的正则表达式来提取android.app.Notification$Action$Builder和b.a 我使用以下代码:python正则表达式没有';行不通,python,regex,Python,Regex,我有这个android logcat的日志: 找不到从方法b.a引用的类android.app.Notification$Action$Builder 我试图用python中的正则表达式来提取android.app.Notification$Action$Builder和b.a 我使用以下代码: regexp = '\'([\w\d\.\$\:\-\[\]\<\>]+).*\s([\w\d\.\$\:\-\[\]\<\>]+)' match = re.match(r'%s
regexp = '\'([\w\d\.\$\:\-\[\]\<\>]+).*\s([\w\d\.\$\:\-\[\]\<\>]+)'
match = re.match(r'%s' % regexp, msg, re.M | re.I)
regexp='\'([\w\d\.\$\:\-\[\]\]+).\s([\w\d\.\$\:\-\[\]\]+)
match=re.match(r'%s'%regexp,msg,re.M | re.I)
我在线测试了正则表达式,它可以正常工作,但它在python中从未匹配过。有人能给我一些建议吗
谢谢re.match()
仅在字符串开头匹配。请改用re.search()
,请参阅
请注意,您似乎误解了原始字符串文字是什么<代码>r“%s”%string不会生成特殊的不同对象r'..'
只是一个符号,它仍然会生成一个常规的字符串对象。将r
放在原始字符串文字上(但如果使用双引号,则不需要引用包含的单引号):
演示:
>>重新导入
>>>regexp=r'class\s+((?:[\w\d\$\:\-\[\]\]+\)+[\w\d\$\:\-\[\]\]+.*方法([\w\d.\$\:\-\[\]\]+)
>>>msg=“找不到类android.app.Notification$Action$Builder,引用自方法b.a”
>>>检索(regexp、msg、re.M | re.I)
>>>检索(regexp,msg,re.M | re.I).groups()
('android.app.Notification$Action$Builder','b.a')
r'%s'%regexp
不会使正则表达式成为原始字符串文字。将r
放在regex=r'…'
字符串上。这并不重要。除此之外,“%s”%some_string
是一种非感官复杂性。更喜欢直接使用一些字符串。在您的情况下,首选re.match(regexp,msg,re.M | re.I)
。我不确定您声称它在在线正则表达式测试仪中是如何工作的。
regexp = r"'([\w\d\.\$\:\-\[\]\<\>]+).*\s([\w\d\.\$\:\-\[\]\<\>]+)"
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')