我在日志文件中有以下输入,我有兴趣捕获ID的所有部分,但它不会返回我的整个ID,只是返回我的一部分:
id:A2uhasan30hamwix١٦٠٢٢٧١٣٣٣١١٣٥٤
id:A2uhasan30hamwix160212145302428
id:A2uhasan30hamwix١٦٠٢٠٩١٣٠١٥٠٠١١
id:A2uhasan30hamwix١٦٠٢٠٩١٦٤٧٣٩٧٣٢
id:A2uhasan30hamwix١٦٠٢٠٨١٩٢٨٠١٩٠٧
id:A2uhasan30hamwix160207145023750
我在python 2.7中使用了以下正则表达式:
I have edited sid to id:
RE_SID = re.compile(r'sid:(<<")?(?P<sid>([A-Za-z0-9._+]*))', re.U)
到
>>> RE_SID = re.compile(ur'id:(<<")?(?P<sid>[A-Za-z\d._+]*)', re.U)
>>> sid = RE_SID.search('id:A2uhasan30hamwix١٦٠٢٢٧١٣٣٣١١٣٥٤').group('sid')
>>> sid
'A2uhasan30hamwix'
这是我的结果:
is: A2uhasan30hamwix
编辑后: 这就是我阅读日志文件的方式:
with open(cfg.log_file) as input_file: ...
fields = line.strip().split(' ')
以及日志中的行示例:
2015-11-30T23:58:13.760950+00:00 calxxx enexxxxce[10476]: INFO consume_essor: user:<<"ailxxxied">> callee_num:<<"+144442567413">> id:<<"A2uhasan30hamwix١٦٠٢٠٨١٩٢٨٠١٩٠٧">> credits:0.0 result:ok provider:sipovvvv1.yv.vs
我将很乐意帮助我编辑正则表达式。
答案 0 :(得分:1)
要解决3件事:
id
代替sid
\d
代替0-9
also catch the arabic numerals sid
命名组修正版:
id:(<<")?(?P<sid>[A-Za-z\d_.+]+)
答案 1 :(得分:1)
根据我们在聊天中讨论的内容,发布解决方案:
update ProductStores
set Value = 1
where ProductId = ?;
答案 2 :(得分:0)
string = '''
id:A2uhasan30hamwix١٦٠٢٢٧١٣٣٣١١٣٥٤
id:A2uhasan30hamwix160212145302428
id:A2uhasan30hamwix١٦٠٢٠٩١٣٠١٥٠٠١١
id:A2uhasan30hamwix١٦٠٢٠٩١٦٤٧٣٩٧٣٢
id:A2uhasan30hamwix١٦٠٢٠٨١٩٢٨٠١٩٠٧
id:A2uhasan30hamwix160207145023750
'''
import re
reObj = re.compile(r'id:.*')
ans = reObj.findall(string,re.DOTALL)
print(ans)
输出
['id:A2uhasan30hamwix160212145302428 ',
'id:A2uhasan30hamwix١٦٠٢٠٩١٣٠١٥٠٠١١ ',
'id:A2uhasan30hamwix١٦٠٢٠٩١٦٤٧٣٩٧٣٢ ',
'id:A2uhasan30hamwix١٦٠٢٠٨١٩٢٨٠١٩٠٧ ',
'id:A2uhasan30hamwix160207145023750']