Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式和python从字符串中提取路由_Python_Regex - Fatal编程技术网

使用正则表达式和python从字符串中提取路由

使用正则表达式和python从字符串中提取路由,python,regex,Python,Regex,我似乎找不到问题出在哪里 我正在尝试从以下字符串中提取路由 s = '{2010501005|XXGpvertex|18|0|35|0|{|{30100001|XXparameter_set|@@@@{{30001002|XXparameter|!prototype_path|$AB_COMPONENTS/Partitioning/Concatenate.mpc|3|2|Pf$|@{0|}}' 我在这里试图实现的是获得路由$AB_COMPONENTS/Partitioning/Concaten

我似乎找不到问题出在哪里

我正在尝试从以下字符串中提取路由

s = '{2010501005|XXGpvertex|18|0|35|0|{|{30100001|XXparameter_set|@@@@{{30001002|XXparameter|!prototype_path|$AB_COMPONENTS/Partitioning/Concatenate.mpc|3|2|Pf$|@{0|}}'
我在这里试图实现的是获得路由$AB_COMPONENTS/Partitioning/Concatenate.mpc,但到目前为止,我已经做到了:

re.search('prototype_path\|(.*)\|', s, re.IGNORECASE).group(1)
这给了我输出:

$AB_COMPONENTS/Partitioning/Concatenate.mpc|3|2|Pf$|@{0
我似乎不知道为什么它一直持续到最后一根管子,有人知道发生了什么吗

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


提前感谢。

使用非贪婪的regexp

.*? 
而不是贪婪的

.*
尝试以下模式:

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

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

因为
*
regexp是贪婪放置的

*

您可以在此处阅读更多内容:

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

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

"|".split(row)[3]