用正则表达式匹配特定序列?

2 投票
4 回答
673 浏览
提问于 2025-04-16 17:00

我正在尝试匹配一些出现的词语,格式是这样的:

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中有没有特别需要注意的地方我不太确定,但这个表达式可以抓取任何在 [ 和 ] 之间的字符串。

撰写回答