我遇到了一些连接不同字符串的问题,我想再次拆分。 我正在处理诸如
之类的事情name="o-n-Butylhydroxylamine1-MethylpropylhydroxylamineAmino-2-butanol"
在这种情况下应分开
"o-n-Butylhydroxylamine", "1-Methylpropylhydroxylamine"
和"Amino-2-butanol"
我是否有任何想法可以使用strsplit
和/或gsub
正则表达式来实现这一目标?
我想要使用的规则是,当数字,括号(“(”)或大写字母跟在小写字母后面时,我想分开一个单词。有什么想法怎么做?
答案 0 :(得分:10)
您可以使用正向环顾断语来查找(然后拆分)字符间位置,前面是小写字母,后面是大写字母,数字或(
。
name <- "o-n-Butylhydroxylamine1-MethylpropylhydroxylamineAmino-2-butanol"
pat <- "(?<=[[:lower:]])(?=[[:upper:][:digit:](])"
strsplit(name, pat, perl=TRUE)
# [[1]]
# [1] "o-n-Butylhydroxylamine" "1-Methylpropylhydroxylamine"
# [3] "Amino-2-butanol"
答案 1 :(得分:3)
strsplit(name, "(?<=([a-z]))(?=[A-Z]|[0-9]|\\()", perl=TRUE)
# [[1]]
# [1] "o-n-Butylhydroxylamine" "1-Methylpropylhydroxylamine" "Amino-2-butanol"
请记住,返回值是一个列表,因此如果合适,请使用[[1]]
。
答案 2 :(得分:2)
试试这个:
name="o-n-Butylhydroxylamine1-MethylpropylhydroxylamineAmino-2-butanol"
print(strsplit(gsub("([a-z])(\\d)","\\1#\\2",
gsub("([a-z])([A-Z])","\\1#\\2",name)),"#")[[1]])
它假定一个非上限字母后跟一个数字是一个分割,一个非上限后跟一个上限。