繁体   English   中英

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

[英]Matching a specific sequence with regex?

我正在尝试匹配显示为:

abcd[_stringiwant_]efgh

abcd[_string_i_want_]efgh

我可以用以下方式表达第一个表达式:

re.compile('\[_[^\[\]_]*_\]');

但这无法获取第二个表达式的字符串。 有人对两者都适用的正则表达式有任何建议吗?

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

那应该行得通。 不确定您必须做的任何 Python 特定的事情,但是该表达式将获取 [ 和 ] 之间的任何字符串

大卫的正则表达式应该可以工作,但我更喜欢

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)

结果

['stringiwant', 'string_i_want']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM