根據多個定界符和特定條件拆分字串時未獲得所需結果。
我嘗試執行以下代碼:
import re
text = r'ced"|"ms|n"|4|98'
finallist = re.split('\"\|\"|\"\||\|', text)
在這里,我試圖通過使用 OR (|) 連接所有分隔符來拆分基于 3 個分隔符的字串。第一個分隔符是使用“|” , 另一個是 "| 然后使用 |
決賽名單看起來像這樣:
finallist=['ced', 'ms','n', '4', '98']
但是我不希望函式在字串中出現的 ms|n 處拆分。由于管道符號出現在雙引號內的字母內,即在本例中為“ms|n”,所以我不希望函式在這種情況下匹配管道符號。
我希望決賽名單看起來像這樣:
finallist=['ced', 'ms|n', '4', '98']
無論如何我可以通過更改拆分函式中的邏輯來實作這一點嗎?請告訴我。
uj5u.com熱心網友回復:
您可以使用
"?\|(?!(?:(?<=[A-Za-z]\|)|(?<=[A-Za-z]\\\|))(?=[a-zA-Z]))"?
請參閱正則運算式演示。詳情:
"?- 一個可選的"字符\|- 一個|字符(?!(?:(?<=[A-Za-z]\|)|(?<=[A-Za-z]\\\|))(?=[a-zA-Z]))|- 如果緊接在char 之后有一個 ASCII 字母并且在 char 之前有一個 ASCII 字母或者在char之前有|一個 ASCII 字母 ,則否定前瞻會導致匹配失敗\|"?- 一個可選的"字符
請參閱Python 演示:
import re
text = r'ced"|"ms|n"|4|98'
pattern = r'"?\|(?!(?:(?<=[A-Za-z]\|)|(?<=[A-Za-z]\\\|))(?=[a-zA-Z]))"?'
print( re.split(pattern, text) )
# => ['ced', 'ms|n', '4', '98']
text = r'ced"|"ms\|n"|4|98'
print( re.split(pattern, text) )
# => ['ced', 'ms\\|n', '4', '98']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/535843.html
上一篇:根據條件將元素串列到字典
