python正則提取特定標籤內的字符

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.]*?)  加上?號 不貪婪匹配 點放在 方括號內

基本上完美了。這應該是最終解決方案。

研究學習到了。

相關文章
相關標籤/搜索