一个 Python 多位置多行的正则提取问题

2014-07-21 19:06:53 +08:00
 lapertem4
新手刚学Python...

有文本

AC1DE2FB
AC3DE4FB
AC5DE6FB

想截取为

[1,2]
[3,4]
[5,6]

试了好几次只能单独截取,有没有大神指点迷津哇~
2866 次点击
所在节点    问与答
6 条回复
messense
2014-07-21 19:22:43 +08:00
>>> s = """AC1DE2FB
... AC3DE4FB
... AC5DE6FB"""
>>> import re
>>> s
'AC1DE2FB\nAC3DE4FB\nAC5DE6FB'
>>> pattern = re.compile(r'\w+?(\d+?)\w+?(\d+?)\w*', re.S | re.M)
>>> dir(pattern)
['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner', 'search', 'split', 'sub', 'subn']
>>> pattern.findall(s)
[('1', '2'), ('3', '4'), ('5', '6')]
messense
2014-07-21 19:25:07 +08:00
以上是终端下试的,完整代码:

import re

pattern = re.compile(r'\w+?(\d+?)\w+?(\d+?)\w*', re.S | re.M)
s = """AC1DE2FB
AC3DE4FB
AC5DE6FB"""

result = pattern.findall(s)

然后可以再对 result 做进一步处理。
lapertem4
2014-07-21 19:30:30 +08:00
@messense 谢回复,答主的思路我明白了,但(嘿嘿)事实的例子不是简单的字母和数字,此例只是为了简化而举的例子。

用re.findall能多位置的匹配吗
messense
2014-07-21 19:46:02 +08:00
@lapertem4 明白了思路根据实际情况改改正则表达式不就差不多了吗
yiding
2014-07-21 19:46:48 +08:00
@lapertem4 都说是 findall 了,就是找全部能够匹配的位置出来
是你处理后的 变量名.findall
lapertem4
2015-01-26 14:58:14 +08:00
test post data

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/123781

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX