使用regex和python从字符串中提取路由

2024-05-17 07:34:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我好像找不到问题出在哪里。你知道吗

我正在尝试从以下字符串中提取路由。你知道吗

s = '{2010501005|XXGpvertex|18|0|35|0|{|{30100001|XXparameter_set|@@@@{{30001002|XXparameter|!prototype_path|$AB_COMPONENTS/Partitioning/Concatenate.mpc|3|2|Pf$|@{0|}}'

我在这里试图实现的是获得路由$AB\u组件/分区/连接.mpc但到目前为止,我已经做到了:

re.search('prototype_path\|(.*)\|', s, re.IGNORECASE).group(1)

这给了我输出:

$AB_COMPONENTS/Partitioning/Concatenate.mpc|3|2|Pf$|@{0

我似乎不知道为什么它一直持续到最后一根管子,有人知道发生了什么吗?你知道吗

重要的是我不能用管子后面的数字3。同样重要的是,我可以使用扩展名.mp作为分隔符。但这也无法解释。你知道吗

提前谢谢。你知道吗


Tags: path字符串re路由abcomponentsprototypeset
3条回答

因为.*regexp是贪婪的put

*?你知道吗

你可以在这里阅读更多:http://docs.python.org/2/library/re.html

所发生的是.*将消耗尽可能多的输入(在您的情况下,一直到最后一个管道) .*?相反,将消耗尽可能少的资源(在您的情况下,将在第一个管道处停止)

另一种更快捷的方法是按看起来像字段分隔符的内容进行拆分,然后选择正确的行

"|".split(row)[3]

尝试以下模式:

re.findall('\|([^|]+?\.mpc)\|', text, re.I)

正如其他人所说,你原来的模式太贪婪了。由于您所需要的只是以“.mpc”结尾的文本,并且所有文本块都由管道分隔,因此您可以获取所有以“.mpc”结尾的非管道字符以获得所需的结果。你知道吗

使用非贪婪的regexp

.*? 

而不是贪婪的

.*

相关问题 更多 >