2 回答

TA貢獻1812條經驗 獲得超5個贊
您可以使用
def split_it(mystring):
return [(m.start(), m.end()) for m in re.finditer('S+', mystring)]
輸出:
>>> dt['C1'].apply(split_it)
0 [(3, 5), (6, 8), (9, 10)]
1 [(0, 2), (5, 7), (9, 10)]
2 []
3 [(0, 10)]
4 [(0, 7), (8, 10)]
5 [(5, 6)]
6 [(0, 1)]
Name: C1, dtype: object
返回re.finditer('S+', mystring)字符串中找到的所有匹配對象,您可以通過.start()和.end()調用獲取開始和結束位置。
請注意,輸出中出現空匹配,因為S*匹配零個或多個 S字符,您需要使用+來匹配一個或多個.

TA貢獻1785條經驗 獲得超4個贊
您可以使用 findall 應用正則表達式:
(
dt
.assign(C2= lambda x: x['C1'].str.findall('S+'))
.assign(C2= lambda x: x.apply(lambda s: [(s[0].find(item),s[0].find(item)+len(item)) for item in s[1]] ,axis=1))
)
C1 C2
0 DDDSSDSSDS [(3, 5), (3, 5), (3, 4)]
1 SSDDDSSDDS [(0, 2), (0, 2), (0, 1)]
2 DDDDDDDDDD []
3 SSSSSSSSSS [(0, 10)]
4 SSSSSSSDSS [(0, 7), (0, 2)]
5 DDDDDSDDDD [(5, 6)]
6 SDDDDDDDDD [(0, 1)]
添加回答
舉報