您好我正在嘗試在不洗掉分隔符的情況下拆分字串,并且它可以有多個分隔符。
分隔符可以是 'D'、'M' 或 'Y' 例如:
>>>string = '1D5Y4D2M'
>>>re.split(someregex, string) #should ideally return
['1D', '5Y', '4D', '2M']
為了保留分隔符,我使用Python split() 而不洗掉分隔符
>>> re.split('([^D] D)', '1D5Y4D2M')
['', '1D', '', '5Y4D', '2M']
對于我在 Python 中使用的多個分隔符,如何拆分字串并保留分隔符?
>>> re.split('(D|M|Y)', '1D5Y4D2M')
['1', 'D', '5', 'Y', '4', 'D', '2', 'M', '']
將兩者結合起來并不完全成功。
>>> re.split('([^D] D|[^M] M|[^Y] Y)', string)
['', '1D', '', '5Y4D', '', '2M', '']
有任何想法嗎?
uj5u.com熱心網友回復:
我會findall()在你的情況下使用。怎么樣:
re.findall(r'\d [DYM]', string
這將導致:
['1D', '5Y', '4D', '2M']
uj5u.com熱心網友回復:
(?<=(?:D|Y|M))
您需要 0 寬度斷言拆分。可以使用regex模塊 python 來完成。
見演示。
https://regex101.com/r/aKV13g/1
uj5u.com熱心網友回復:
您可以在 之后的位置進行拆分D,但不能在字串的末尾使用YM
re.split(r'(?<=[DYM])(?!$)', text)
請參閱正則運算式演示。細節:
(?<=[DYM])D- 與緊接在orY或 or之前的位置相匹配的正向后視M(?!$)- 如果當前位置是字串結束位置,則匹配失敗的負前瞻。
筆記
在當前場景中,(?<=[DYM])可以使用而不是更冗長(?<=D|Y|M),因為所有替代項都是單個字符。如果您有多字符定界符,則必須使用非捕獲組 , (?:...),其中包含后視替代方案。例如,要在 之后分開,Y你會使用. 請參閱Python 正則運算式引擎 - “look-behind requires fixed-width pattern”錯誤DXMZB(?:(?<=Y)|(?<=DX)|(?<=MZB))
uj5u.com熱心網友回復:
我認為沒有正則運算式或拆分時間復雜度 O(n) 就可以正常作業
string = '1D5Y4D2M'
temp=''
res = []
for x in string:
if x=='D':
temp ='D'
res.append(temp)
temp=''
elif x=='M':
temp ='M'
res.append(temp)
temp=''
elif x=='Y':
temp ='Y'
res.append(temp)
temp=''
else:
temp =x
print(res)
uj5u.com熱心網友回復:
使用翻譯
string = '1D5Y4D2M'
delimiters = ['D', 'Y', 'M']
result = string.translate({ord(c): f'{c}*' for c in delimiters}).strip('.*').split('*')
print(result)
>>> ['1D', '5Y', '4D', '2M']
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/510265.html
