2015-01-09 109 views
0

動態字符串我試圖找到查找字符串

f = "[[[someword_1234]]]" 

s = "weifjwieufh weifuwiefuhw ejfwi eujfh iwueh fiwe [[[someword_1234]]]" 

但字面someword_1234三重方括號內可以改變的。所以我做不到:

s.find(f) 

我該怎麼辦?

回答

5

由於您需要匹配模式而不是靜態文本,因此您應該使用re模塊。具體而言,您正在尋找re.search

>>> import re 
>>> s = "weifjwieufh weifuwiefuhw ejfwi eujfh iwueh fiwe [[[someword_1234]]]" 
>>> re.search(r'\[\[\[[^\]]+\]\]\]', s).group() 
'[[[someword_1234]]]' 
>>> 

下面的模式匹配什麼樣的解釋:

\[\[\[ # [[[ 
[^\]]+ # One or more characters that are not ] 
\]\]\] # ]]] 

請注意,你需要逃避[],因爲他們有一個正則表達式的特殊含義。

+0

哇,我知道python可以做任何事情!謝謝 – doniyor 2015-01-09 22:33:53

+0

而不是'[^ \]] +'你可以使用一個非貪婪的限定詞:'。+?' – augurar 2015-01-09 23:30:55

+0

@augurar - 這也可以。但是,它通常比較慢,因爲解析器需要回溯才能匹配它的模式。使用'[^ ​​\]] +'可以讓它在一次運行中得到一切。您應該總是嘗試對非貪婪限定符使用否定字符集來提高性能。 – iCodez 2015-01-09 23:35:34