我试图以匹配出现的术语:匹配正则表达式的特定序列?
abcd[_stringiwant_]efgh
和
abcd[_string_i_want_]efgh
我能够与第一表达:
re.compile('\[_[^\[\]_]*_\]');
但这未能抢第二个表达式的字符串。任何人都有任何建议的正则表达式适用于两者?
我试图以匹配出现的术语:匹配正则表达式的特定序列?
abcd[_stringiwant_]efgh
和
abcd[_string_i_want_]efgh
我能够与第一表达:
re.compile('\[_[^\[\]_]*_\]');
但这未能抢第二个表达式的字符串。任何人都有任何建议的正则表达式适用于两者?
re.compile('\[([^\]]+)\]')
这应该工作。不知道任何事情的Python特定你必须做的,但表达将抓住之间[和]
大卫的正则表达式应该工作的任何字符串,但我更喜欢
re.compile(r'\[(.+?)\]')
的可读性。 +?
是一个非贪婪的修饰符,这意味着它将抓取尽可能少的字符,即它会抓取所有字符,直到第一个字符为止]
。
我通常避免。在正则表达式的习惯,但是,这绝对是一个更可读的解决方案:) – 2011-05-04 20:31:18
我想我需要多一点信息,但是我会在黑暗中进行刺探,并说当你真的想要找到时你可能正在使用搜索。另外,根据你所描述的,你的正则表达式并不完全正确(为什么要强调?你想让它返回空字符串吗?如果没有,那么不要使用*,使用+)。试试这个:
searcher = re.compile(r'\[([^\]]+)\]')
list_of_results = searcher.findall(string_to_search)
伤了使用大卫的正则表达式让生活更容易对我自己。不过,埃里克的确更加优雅。 – 2011-05-04 20:37:04
我想你想的是:
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']
一个蟒蛇特定的笔记,你应该使用原始字符串('R'\ [(^\]] +)\]'')。它可以让你免于丑陋的''':) :) – 2011-05-04 20:37:26
感谢您的解决方案。我想知道是否可以匹配序列'[_'和'_]',而忽略旁边没有'['或']'的字符'_'。 – 2011-05-04 20:50:04