perl正则表达式匹配从最后一个,跳过最后一个分隔符

时间:2014-04-02 13:40:45

标签: regex perl

我正在尝试在Perl中为模式编写正则表达式:

“”Wagner JS,Adson MA,Van Heerden JA等(1984)来自结肠直肠癌的肝转移的自然史。与切除治疗的比较。 Ann Surg 199:502-508“”\ s

得到最后一部分:“Ann Surg 199:502-508” 所以我写了

$string =~ m/\.([^\d]*\s\d*\:\d*\–\d*)\"\"\s$/

我得到1美元的比赛部分是:“与切除治疗的比较.Ann Surg 199:502-508”但我期待:“Ann Surg 199:502-508”。

在某些情况下,它正在发挥作用,但在其中一些情况下并非如此。尝试搜索但没有得到满意的答案。请提出建议。

4 个答案:

答案 0 :(得分:1)

您只需在字符类中添加点:

$string =~ m/\.([^\d.]*\s\d*:\d*–\d*)""\\s$/

但更好的方法是将带有点的字符串拆分为分隔符并取最后一部分。

答案 1 :(得分:1)

如果你想要每个字符串的最后一部分,那么你只需要

$string =~ /([^.]+)$/

或者,为了避免句号后的空格

$string =~ /([^.\s][^.]+)$/

答案 2 :(得分:0)

请试一试:

$string =~ m/\.\s*([^\.\d]*\s*\d*\:\d*\–\d*)""\\s$/;

答案 3 :(得分:0)

另一种选择,在最后一段时间之后取出所有内容,不包括前导空格:

$string =~ m/(?!\s)([^.]+)$/