Python 将特定序列与正则表达式匹配?

Python 将特定序列与正则表达式匹配?,python,regex,Python,Regex,我正在尝试匹配如下所示的术语: abcd[_stringiwant_]efgh 及 我可以使用以下命令创建第一个表达式: re.compile('\[_[^\[\]_]*_\]'); 但这无法获取第二个表达式的字符串。有人对同时适用于两者的正则表达式有什么建议吗 re.compile('\[([^\]]+)\]') 这应该行得通。不确定您必须执行哪些特定于Python的操作,但该表达式将获取[and]之间的任何字符串,David的正则表达式应该可以工作,但我更喜欢它 re.compile(

我正在尝试匹配如下所示的术语:

abcd[_stringiwant_]efgh

我可以使用以下命令创建第一个表达式:

re.compile('\[_[^\[\]_]*_\]');
但这无法获取第二个表达式的字符串。有人对同时适用于两者的正则表达式有什么建议吗

re.compile('\[([^\]]+)\]')

这应该行得通。不确定您必须执行哪些特定于Python的操作,但该表达式将获取[and]

之间的任何字符串,David的正则表达式应该可以工作,但我更喜欢它

re.compile(r'\[(.+?)\]')

为了可读性。
+?
是一个非贪婪的修饰符,这意味着它将获取尽可能少的字符数,也就是说,它将获取所有字符,直到第一个
]
我想我需要更多的信息,但我想暗中试探一下,当你真正想要findall时,你可能正在使用搜索。此外,根据您所描述的,您的正则表达式也不太正确(为什么是下划线?是否希望它返回空字符串?如果不是,则不要使用*,使用+)。试试这个:

searcher = re.compile(r'\[([^\]]+)\]')
list_of_results = searcher.findall(string_to_search)
我想你想要的是:

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)

我通常避免。习惯性地使用正则表达式,但这绝对是一个更具可读性的解决方案:)最终使用David的正则表达式让自己的生活更轻松。Eric的绝对更优雅。一个特定于python的注释,您可能应该使用原始字符串(
r'\[([^\]]+)\]'
)。它可以避免你做丑陋的事情:)谢谢你的解决方案。我想知道是否可以在忽略旁边没有“[”或“]”的字符“25;”的情况下匹配序列“[”和“]”。
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']