我正在处理一个路由项目。路由看起来像这个"CNSHG(B)-PAMIT(R)-COCTG(B)-USHOU(R)-COCTG(B)-USMSY"
,我想把它分解成一个嵌套列表。此外,一条路线包含多个路段,例如CNSHG-PAMIT是使用B运输的一个路段,然后使用R运输的PAMIT-COTG,即铁路,等等
输入:
"CNSHG(B)-PAMIT(R)-COCTG(B)-USHOU(R)-COCTG(B)-USMSY"
输出应该是这样的:
[[CNSHG, PAMIT, B],[PAMIT, COCTG, R],[COCTG, USHOU, B],[USHOU, COCTG, R],[COCTG, USMSY, B]]
我尝试过使用regex和下面的代码,但没有成功。
route.str.extract('(.)s((.d+)')
非常感谢。
您可以使用
import pandas as pd
df = pd.DataFrame({'col':["CNSHG(B)-PAMIT(R)-COCTG(B)-USHOU(R)-COCTG(B)-USMSY"]})
df['result'] = df['col'].str.findall(r'(w+)((?=[^()]*)-(w+))([^()]*))')
df['result']
:输出
[('CNSHG', 'PAMIT', 'B'), ('PAMIT', 'COCTG', 'R'), ('COCTG', 'USHOU', 'B'), ('USHOU', 'COCTG', 'R'), ('COCTG', 'USMSY', 'B')]
请参阅regex演示详细信息:
(w+)
-一个或多个单词字符(
-一个(
字符(?=[^()]*)-(w+))
-一个积极的前瞻性,需要(立即在当前位置的右侧(:[^()]*
-除(
和)
之外的零个或多个字符)-
-)-
字符串(w+)
-组2:一个或多个单词字符
([^()]*)
-第3组:除(
和)
之外的零个或多个字符)
-一个)
字符