python 3.5.2python
提取下面數據 多個組合學習
[BEGIN]spa
[b]*****[e]code
[b]-------[e]字符串
[b]XXXclass
DDD效率
FFF數據
[e]解決方案
[END]標籤
相似這種數據,提取[BEGIN] 和 [END]中間的內容。
思想,兩個標籤之間任意字符串,且不含有結尾標籤組合的結構。
若是中間有 結尾處的字符組合那就沒戲了!
r'\[BEGIN\]([\s\S]([^D]|[^N]D|[^E]ND)*)\[END\]'
\[BEGIN\] 開頭
([\s\S]([^D]|[^N]D|[^E]ND)*) 中間
[\s\S] 任意字符串 ([^D]|[^N]D|[^E]ND) 不含有END組合的 * 任意個
\[END\] 結尾處字符串
xx = """[BEGIN] [L_B]111dsfasfa 黃s423333[L_E] [END] [BEGIN] [L_B]222dsfas 23444[L_E] [END]""" y = re.findall(r'\[BEGIN\]([\s\S]([^\]][^D]\]|[^N]D\]|[^E]ND\]|[^\[]END\])*)\[END\]', xx, re.M) print(y)
上面的內容比以前講解的內容稍長 排除了 [END] 組合
可是可見 後標籤越長 匹配串越長 效率越低
以後又通過改進 最終以下
r'\[BEGIN\]([\s\S.]*?)\[END\]'
([\s\S.]*?) 加上?號 不貪婪匹配 點放在 方括號內
基本上完美了。這應該是最終解決方案。
研究學習到了。