2

我有:`

String="(anthony,2019, p.485)"

期望的输出:

String="(anthony,2019)"

我只想删除 p.485。

我使用正则表达式:`

gsub("\\( \\,p\\.[0-9]\\)","",String) 

但它不起作用。

谢谢!

4

3 回答 3

2

我们可以使用subto match,后跟一个空格、'p' 和一个或多个数字 ( \\d+),在替换中用空格 ( "") 替换

sub(", p\\.\\d+", "", String)
#[1] "(anthony,2019)"
于 2019-02-28T19:01:08.193 回答
1

我们也可以试试这个效率稍低的正则表达式:

String="(anthony,2019, p.485)"
gsub(",\\s\\w.\\d{1,}","",String,perl=TRUE)
#[1] "(anthony,2019)"
于 2019-02-28T19:10:10.490 回答
0

这似乎有点脆弱,因为它取决于逗号后除了最后一个空格之外没有任何空格:

gsub("[,] [^,)]+","", String)
[1] "(anthony,2019)"

这种脆弱性也困扰着阿克伦的回答。一个更强大的解决方案是匹配最后一个逗号,但保留在结束括号中。此解决方案将找到最后一个逗号并删除所有内容,但不包括结束括号:

gsub("(.+)([,] [^,]+)([)])","\\1\\3", String)  # 3 capture classes

[1] "(anthony,2019)"                           # return only first and third
于 2019-02-28T19:37:31.670 回答