我試圖以匹配出現的術語:匹配正則表達式的特定序列?
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