python - python中的正则表达式不匹配
问题描述
我在 python 上做正则表达式。我花了很多时间来修复并了解为什么正则表达式不起作用或不匹配。我在这里发布文本和我的代码。我可以知道我的代码有什么问题吗:
文字是:
[pid 30101] 04:15:46 writev(25, [{"\0\225ub'\375[\340\244\6/", 11}, {"\4", 1},
{"Id before\0", 17}, {"Id\0", 10}], 4) = 39
[pid 30101] 04:15:46 getuid() = 10168
[pid 30101] 04:15:46 getuid() = 10168
[pid 30101] 04:15:46 ioctl(8, BINDER_WRITE_READ, 0x7fc0656648) = 0
[pid 30101] 04:15:46 ioctl(8, BINDER_WRITE_READ, 0x7fc0656648) = 0
[pid 30101] 04:15:46 fstat(33, {st_mode=S_IFCHR|0666, st_rdev=makedev(10, 62),
...}) = 0
[pid 30101] 04:15:46 fstat(33, {st_mode=S_IFCHR|0666, st_rdev=makedev(10, 62),
...}) = 0
[pid 30101] 04:15:46 ioctl(33, ASHMEM_GET_SIZE, 0) = 84
[pid 30101] 04:15:46 dup(33) = 34
[pid 30101] 04:15:46 close(33) = 0
[pid 30101] 04:15:46 dup(34) = 33
[pid 30101] 04:15:46 fstat(33, {st_mode=S_IFCHR|0666, st_rdev=makedev(10, 62),
...}) = 0
[pid 30101] 04:15:46 ioctl(33, ASHMEM_GET_SIZE, 0) = 84
[pid 30101] 04:15:46 mmap(NULL, 84, PROT_READ, MAP_SHARED, 33, 0) =
0x7d517db000
[pid 30101] 04:15:46 fstat(33, {st_mode=S_IFCHR|0666, st_rdev=makedev(10, 62),...}) = 0
[pid 30101] 04:15:46 ioctl(33, ASHMEM_GET_SIZE, 0) = 84
[pid 30101] 04:15:46 fstat(34, {st_mode=S_IFCHR|0666, st_rdev=makedev(10, 62),
...}) = 0
[pid 30101] 04:15:46 fstat(34, {st_mode=S_IFCHR|0666, st_rdev=makedev(10, 62),...}) = 0
[pid 30101] 04:15:46 ioctl(34, ASHMEM_GET_SIZE, 0) = 84
[pid 30101] 04:15:46 close(34) = 0
[pid 30101] 04:15:46 getuid() = 10168
[pid 30101] 04:15:46 writev(25, [{"\0\225ub'\375[\260y\3274", 11}, {"\4", 1},
{"After\0", 16}, {"eb41e1a15da0b8ee\0", 17}], 4) = 45
[pid 30101] 04:15:46 ioctl(8, BINDER_WRITE_READ, 0x7fc0656ee8) = 0
[pid 30101] 04:15:46 ioctl(8, BINDER_WRITE_READ, 0x7fc0656ee8) = 0
这是我的代码:
import re
text = open('textfile.txt').read()
pid= str(30101)
if re.findall(r"^.* " + pid +"] \d\d:\d\d:\d\d getuid()^.*" + pid +"]\d\d:\d\d:\d\d ioctl\(8\, BINDER_WRITE_READ\, 0x7fc0656648\)^.*" + pid +"] \d\d:\d\d:\d\d fstat\(33\, \{st_mode=S_IFCHR\|0666\, st_rdev=makedev\(10\, 62\)\,
...\}\).*", text, re.M):
print 'found a match!'
else:
print 'no match'
解决方案
在开发正则表达式时尝试从小处着手。某些字符(如[
, ]
, (
, )
, ...)具有特殊含义。如果要从字面上匹配这些字符,则需要通过\
在字符前面附加 a 来转义它们。
使用转义的正则表达式的简化版本:
import re
text = open('textfile.txt').read()
pid= str(30101)
print re.findall(r"^.* " + pid + "\] \d\d:\d\d:\d\d getuid\(\)", text, re.M)
产生以下输出:
['[pid 30101] 04:15:46 getuid()', '[pid 30101] 04:15:46 getuid()', '[pid 30101] 04:15:46 getuid()']
我建议阅读re
解释语法的模块的 python 文档,然后逐步扩展您的正则表达式。
这回答了你的问题了吗?
推荐阅读
- android - 如何从 apk 文件中获取反应本机代码
- haskell - 如何在 playIO 功能中退出游戏?
- python - 查看limit offset分页中的所有数据
- php - 我只需要在日期字段 TCA 错字3 中显示月份和年份
- ms-access - 如何在 MS Access 表单中添加序列号字段
- intellij-idea - 抑制关于 IDEA 中未使用的 Kotlin 属性的警告
- ruby - Ruby 内存使用变得疯狂
- java - ComboBoxTableCell 依赖于 JavaFx 的另一种类型
- c# - 正在拖动的 TreeList 节点字段未在数据库表中更新
- python-3.x - 如何隐藏/删除 mayavi 管道?