我在python中有一個這樣的字串
filter="eq(Firstname,test),eq(Lastname,ltest),OR(eq(ContactID,12345),eq(ContactID,123456))"
rx_comma = re.compile(r"(?:[^,(]|\([^)]*\)) ")
result = rx_comma.findall(filter)
實際結果是:
['eq(Firstname,test)', 'eq(Lastname,ltest)', 'OR(eq(ContactID,12345)', 'eq(ContactID,123456))']
預期結果是:
['eq(Firstname,test)', 'eq(Lastname,ltest)', 'OR(eq(ContactID,12345),eq(ContactID,123456))']
任何幫助表示贊賞。
uj5u.com熱心網友回復:
使用PyPi 正則運算式模塊,您可以使用如下代碼
import regex
s = "eq(Firstname,test),eq(Lastname,ltest),OR(eq(ContactID,12345),eq(ContactID,123456))"
for x in regex.split(r"(\((?:[^()] |(?1))*\))(*SKIP)(*F)|,", s):
if x is not None:
print( x )
輸出:
eq(Firstname,test)
eq(Lastname,ltest)
OR(eq(ContactID,12345),eq(ContactID,123456))
請參閱Python和正則運算式演示。
詳情:
(\((?:[^()] |(?1))*\))- 組 1 捕獲嵌套成對括號之間的字串(*SKIP)(*F)- 跳過匹配并從失敗位置搜索下一個匹配|- 要么,- 一個逗號。
uj5u.com熱心網友回復:
感謝 Wiktor Stribi?ew 提供解決方案
這是解決方案:
import regex
filter = "eq(Firstname,test),eq(Lastname,ltest),OR(eq(ContactID,12345),eq(ContactID,123456))"
for s in regex.split(r"(\((?:[^()] |(?1))*\))(*SKIP)(*F)|,", filter):
if s is not None:
print( s )
結果:
eq(Firstname,test)
eq(Lastname,ltest)
OR(eq(ContactID,12345),eq(ContactID,123456))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/437185.html
上一篇:堆疊在多包專案中運行
