这里正则表达式的新手......
假设以下名称:
names <- c("Jackson, Michael", "Lennon, John", "Obama, Barack")
Run Code Online (Sandbox Code Playgroud)
我想拆分名称,以保留所有字符,包括名字的第一个字母.因此,结果看起来像这样:
Jackson, M
Lennon, J
Obama, B
Run Code Online (Sandbox Code Playgroud)
我知道这是一个简单的解决方案,但我仍然坚持指出似乎是一个合理的解决方案 - 即一个积极的前瞻性正则表达式.我根据逗号,空格和大写字母中的第一个字母指定匹配项.这就是我所拥有的,但显然是错的:
names.reduced <- gsub("(?=\\,\\s[A-Z]).*", "", names)
Run Code Online (Sandbox Code Playgroud)
hwn*_*wnd 10
(?= ... ) 是一个零宽度断言,不消耗字符串上的任何字符.
它只匹配字符串中的位置.零宽度的点是验证正则表达式是否能够或者不能与当前位置相匹配,而不是添加到整体匹配.在这种情况下,根本不需要使用先行断言.
您可以使用捕获组执行此操作,反向引用替换调用中的组.
sub('(.*[A-Z]).*', '\\1', names)
# [1] "Jackson, M" "Lennon, J" "Obama, B"
Run Code Online (Sandbox Code Playgroud)
或者更好的是,你可以使用否定删除所有除A到Z字符串的结尾.
sub('[^A-Z]*$', '', names)
# [1] "Jackson, M" "Lennon, J" "Obama, B"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |