使用R中的regex删除字符串中的方括号和换行符

时间:2018-10-13 19:57:59

标签: r regex

我想从较长的字符串"[11257]"中删除带方括号和数字"[11257] 39558 39566 39569 39570 39572 39576 39577"的字符串的一部分。这很简单。

easy_string <- "[11257] 39558 39566 39569 39570 39572 39576 39577"
sub("\\[.*?\\]", "\\1", easy_string, perl = TRUE)

哪个返回我期望的值:

[1] " 39558 39566 39569 39570 39572 39576 39577"

但是,我无法弄清楚如何调整我的正则表达式模式以选择多个匹配项。另外,更困难的字符串包括换行符,如:

hard_string <- "[11257] 39558 39566 39569 39570 39572 39576 39577 39583
[11269] 39592 39595 39596 39597 39600 39602 39607 39608 39611 39616 39618
[11281] 39621 39623 39624 39627 39631 39632 39633 39635 39639 39641 39644 
[11293] 39649 39650 39656 39658 39667 39670 39671 39681 39682 39683 39684 
[11305] 39694 39695 39704 39711 39712 39714 39715 39723"

当我运行sub()命令时,R返回:

[1] " 39558 39566 39569 39570 39572 39576 39577 39583\n[11269] 39592 39595 
39596 39597 39600 39602 39607 39608 39611 39616 39618\n[11281] 39621 39623 
39624 39627 39631 39632 39633 39635 39639 39641 39644 \n[11293] 39649 39650 
39656 39658 39667 39670 39671 39681 39682 39683 39684 \n[11305] 39694 39695 
39704 39711 39712 39714 39715 39723"

当字符串中包含换行符时,如何删除所有方括号和其中的数字?

答案

感谢akrun,我使用了gsub()并保存了结果,因此我可以在第二次gsub()调用中删除换行符。

hard_fixed <- gsub("\\[.*?\\]\\s", "\\1", hard_string, perl = TRUE)
gsub("\\\n", "\\1", hard_fixed, perl = TRUE)

1 个答案:

答案 0 :(得分:1)

我们需要gsub(全局替换)而不是sub来删除多次出现的模式。 sub仅与模式的第一次出现匹配

gsub("\\[.*?\\]\\s", "\\1", hard_string, perl = TRUE)