使用正则表达式和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]