R 在具有给定条件的字符串中添加括号
我想在条件下为下面的字符串添加括号。这些数字由两部分组成:“Id-subId”,我想在有多个subId时加上括号R 在具有给定条件的字符串中添加括号,r,regex,stringr,R,Regex,Stringr,我想在条件下为下面的字符串添加括号。这些数字由两部分组成:“Id-subId”,我想在有多个subId时加上括号 sample_string1 = "376-12~23, 28, 32, 35, 37,376-1" sample_string2 = "391-1~8, 391-22~23" sample_string3 = "391-10~21, 391-24, 27, 29" 这是我想要的结果 desire_string1 = &
sample_string1 = "376-12~23, 28, 32, 35, 37,376-1"
sample_string2 = "391-1~8, 391-22~23"
sample_string3 = "391-10~21, 391-24, 27, 29"
这是我想要的结果
desire_string1 = "376-(12~23, 28, 32, 35, 37),376-1"
desire_string2 = "391-(1~8), 391-(22~23)"
desire_string3 = "391-(10~21), 391-(24, 27, 29)"
我该怎么做?提前感谢这是一个相当复杂的正则表达式问题。我真诚地建议您不要使用此解决方案,而是将所需的变量分离出来,并使其整洁 然而,你问了这个问题,这里有一个正则表达式的答案。我使用了
stringr
包,因为我发现它比grep
更容易阅读
正则表达式分解如下:
(?产生正确输出的正则表达式是:
(?:(\d+-)((?:\d+~\d+|(?:,?\s*\d+){2,})+)(?=,\s*\d+-|\"))
演示:
(\d+-)
匹配ID和破折号
\d+~\d+
匹配子ID范围或
(?:,?\s*\d+{2,}
至少两个子ID
(?=,\s*\d+-\124;\”
对下一个ID或结束引号进行正向展望
(?:(\d+-)((?:\d+~\d+|(?:,?\s*\d+){2,})+)(?=,\s*\d+-|\"))