用正则表达式匹配特定序列?
我正在尝试匹配一些出现的词语,格式是这样的:
abcd[_stringiwant_]efgh
还有
abcd[_string_i_want_]efgh
我可以用以下方式匹配第一个表达式:
re.compile('\[_[^\[\]_]*_\]');
但是这无法抓取第二个表达式的字符串。有没有人能给我一些建议,找一个可以同时适用于这两个表达式的正则表达式?
4 个回答
0
我觉得你想要的是这个:
text = '''zza [_stringiwant_] cododo
21321324654654654
aaaaaaaaaa [stringiDONTwant_] bbb
cccc[stringiDONTwantnomore]ddddd
hghghg [_string_i_want_] lumulu
321321
rrree [_out of need] kjhfkhfg'''
import re
regx = re.compile('(?<=\[_).+?(?=_\])')
print regx.findall(text)
结果
['stringiwant', 'string_i_want']
1
大卫的正则表达式应该是可以用的,但我更喜欢
re.compile(r'\[(.+?)\]')
这样写,因为更容易看懂。这里的 +?
是一个非贪婪的修饰符,意思是它会尽量少抓取字符,也就是说,它会抓取所有字符,直到遇到第一个 ]
为止。
2
re.compile('\[([^\]]+)\]')
这个方法应该可以用。至于在Python中有没有特别需要注意的地方我不太确定,但这个表达式可以抓取任何在 [ 和 ] 之间的字符串。