我正在尝试在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”。
在某些情况下,它正在发挥作用,但在其中一些情况下并非如此。尝试搜索但没有得到满意的答案。请提出建议。
答案 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)([^.]+)$/