假設我有以下字串:
Prop1=a,Prop2=[Prop2_1=b,Prop2_2=c],Prop3=[Prop3_1=[Prop3_2_1=e,Prop3_2_2=f,Prop3_2_3=g],Prop3_2=d],...
我可以Prop1很容易地提取 的值,使用模式(?<=Prop1=).*?(?=,)。
因為Prop2我想提取[Prop2_1=b,Prop2_2=c],而對于 Prop3,我想提取[Prop3_1=[Prop3_2_1=e,Prop3_2_2=f,Prop3_2_3=g],Prop3_2=d].
但問題是:我事先不知道我要查找的內容是否是嵌套的,或者有多少嵌套度數。
是否有一個正則運算式可以處理一般情況?
編輯
我被提醒我需要指定哪種風格的正則運算式。我正在使用 python ( import re)。
uj5u.com熱心網友回復:
您不能使用,re因為它不支持遞回和正則運算式子例程。您需要regex使用pip install regex然后使用import regex as re(或import regex然后使用regex代替re)來安裝 PyPi模塊。
您可以使用的模式是
Prop3=\K(?:(\[(?:[^][] |(?1))*])|[^,]*)
請參閱正則運算式演示。詳情:
Prop3=-Prop3=文字\K- 匹配重置運算子,丟棄到目前為止匹配的文本(?:(\[(?:[^][] |(?1))*])|[^,]*)- 匹配的非捕獲組(\[(?:[^][] |(?1))*])-第1組:[,則比其他零次或多個重復的一個或多個字符的[和]或整個組1圖案遞回,然后一個]字符|- 或者[^,]*- 零個或多個字符,而不是,
import regex
text = "Prop1=a,Prop2=[Prop2_1=b,Prop2_2=c],Prop3=[Prop3_1=[Prop3_2_1=e,Prop3_2_2=f,Prop3_2_3=g],Prop3_2=d],..."
print( regex.search(r'Prop1=\K(?:(\[(?:[^][] |(?1))*])|[^,]*)', text).group() )
# => a
print( regex.search(r'Prop2=\K(?:(\[(?:[^][] |(?1))*])|[^,]*)', text).group() )
# => [Prop2_1=b,Prop2_2=c]
print( regex.search(r'Prop3=\K(?:(\[(?:[^][] |(?1))*])|[^,]*)', text).group() )
# => [Prop3_1=[Prop3_2_1=e,Prop3_2_2=f,Prop3_2_3=g],Prop3_2=d]
在線查看Python 演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334547.html
標籤:正则表达式
上一篇:正則運算式與字典的有效使用
