将字符串中的元素提取到嵌套列表中



我正在处理一个路由项目。路由看起来像这个"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组:除()之外的零个或多个字符
  • )-一个)字符

最新更新