如何只提取字符串的最后三个部分

时间:2014-05-28 20:22:37

标签: regex

对于下面的示例代码,我只对由反斜杠分隔的最后三位感兴趣(例如,Family / Genus / Species Name)。

所以:

Magnoliopsida/Dilleniidae/Malvales/Malvaceae/Abutilon/Abutilon_theophrasti
Magnoliopsida/Rosidae/Euphorbiales/Euphorbiaceae/Acalypha/Acalypha_rhomboidea
Magnoliopsida/Rosidae/Sapindales/Aceraceae/Acer/Acer_negundo
Magnoliopsida/Rosidae/Sapindales/Aceraceae/Acer/Acer_nigrum

我想:

Malvaceae/Abutilon/Abutilon_theophrasti
Euphorbiaceae/Acalypha/Acalypha_rhomboidea
Aceraceae/Acer/Acer_negundo
Aceraceae/Acer/Acer_nigrum

如何使用正则表达式完成此操作?

编辑: 我正在使用Notepad ++的替换功能和正则表达式。 我能够用^ [^ /] + / [^ /] + / [^ /] + [^ /] /“找到”我要替换的内容 但是当我用什么都替换它时,它会做一些奇怪的事情。 有什么建议吗?

5 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情:

  

(/(\w)*){3}$

答案 1 :(得分:0)

不要使用正则表达式。正则表达式不是一个魔术棒,你会在每个涉及字符串的问题上挥手。

如果你正在使用PHP,那么使用explode函数将组件分解为数组,然后使用数组的最后三个元素。

$name = 'Magnoliopsida/Dilleniidae/Malvales/Malvaceae/Abutilon/Abutilon_theophrasti';
$parts = explode( '/', $name );
$n = count($parts);
print $parts[$n-3] . ' ' . $parts[$n-2] . ' ' . $parts[$n-1];

其他语言也有类似的功能。

同样/是斜杠,而不是反斜杠。 \是反斜杠。

答案 2 :(得分:0)

好的,想通了......

我可以搜索:\n^[^/]+/[^/]+/[^/]+[^/]/ 并替换为:\n

获得或多或少的我想要的东西。

全部谢谢!

答案 3 :(得分:0)

由于用户将Notepad ++指定为应用程序,我建议替换

^.+/(\w+/\w+/\w+)

$1

答案 4 :(得分:0)

在Python中

import re 
x="Magnoliopsida/Rosidae/Sapindales/Aceraceae/Acer/Acer_nigrum"
pattern=re.compile(r"\w+\/\w+\/\w+\/(\S+)")
y=pattern.match(x).groups()
print y

输出是(' Aceraceae / Acer / Acer_nigrum',)