我正在尝试匹配显示为的字词:
abcd[_stringiwant_]efgh
和
abcd[_string_i_want_]efgh
我能用第一个表达式:
re.compile('\[_[^\[\]_]*_\]');
但是无法获取第二个表达式的字符串。任何人都有任何关于正则表达式的建议吗?
答案 0 :(得分:2)
re.compile('\[([^\]]+)\]')
那应该有用。不确定你需要做什么Python特定的,但该表达式将获取[和]
之间的任何字符串答案 1 :(得分:1)
David的正则表达式应该可行,但我更喜欢
re.compile(r'\[(.+?)\]')
为了便于阅读。 +?
是一个非贪婪的修饰符,这意味着它将抓取可能的最小字符数,即它会抓取所有字符,直到第一个]
。
答案 2 :(得分:0)
我想我需要更多信息,但是我会在黑暗中捅一下并说当你真的想要查找时你可能正在使用搜索。另外,根据你描述的内容你的正则表达式是不正确的(为什么要强调?你想让它返回空字符串吗?如果没有,那么不要使用*,使用+)。试试这个:
searcher = re.compile(r'\[([^\]]+)\]')
list_of_results = searcher.findall(string_to_search)
答案 3 :(得分: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']