作者bob123 ()
看板Python
标题Re: [问题] 符合多个正规表示式
时间Wed Jun 19 13:31:58 2013
※ 引述《eaden (evenrain)》之铭言:
: 问题是这样的,我有一堆字串以及多个正规表示式,
: 我希望可以透过简单的方式知道哪个字串符合哪个正规表示式,
: 且正规表示式间是有优先顺序的,
: 我目前想到的解法是这样 (两个网址是一样的 code XD)
: http://pastie.org/7999821
: http://chopapp.com/#ksu6oyv4
: 结果会是
: aabbccdd is level 4
: aaabccdd is level 3
: bbccaaaaa is level 1
: bbccddee is not match
: 12345678 is not match
: 不过一来这样做表示式的顺序很重要,二来是程式看起来不太直觉...
: 不知道有没有比较聪明一点的写法?
import re
strs= [
'aabbccdd',
'aaabccdd',
'bbccaaaaa',
'bbccddee',
'12345678',
]
patterns = [
r'(^.*a{5}.*$)',
r'(^.*a{4}.*$)',
r'(^.*a{3}.*$)',
r'(^.*a{2}.*$)',
r'(^.+$)',
]
s = "\n".join(strs)
pattern = r'(?m)' + r'|'.join(patterns)
maptab = re.findall(pattern,s)
# or use re.finditer / callable-iterator.lastindex
---------------------------------------------
In [167]: maptab
Out[167]:
[('', '', '', 'aabbccdd', ''),
('', '', 'aaabccdd', '', ''),
('bbccaaaaa', '', '', '', ''),
('', '', '', '', 'bbccddee'),
('', '', '', '', '12345678')]
接着就自己再做处理罗
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.156.250
1F:→ uranusjr:^.* 感觉是个不错的表情符号 06/19 14:30
2F:→ uranusjr:^.*a 好像也不错 06/19 14:31
3F:推 eaden:感谢,我再试试看 ^^ 06/19 16:49
4F:→ darkgerm:^.*~$ # 可以 match vim 的备份档XDDD 06/19 16:58
5F:→ swpoker:r(^.*)a 好像也很可爱勒 06/19 17:40
6F:→ bob123:XDD 06/19 23:58