r - 如何使用 R 删除遵循特定模式但不包括另一个模式的字符串部分?

标签 r regex dataframe stringr

我在 R 中有一个数据框,其中包含人员数据。字符串的第一部分是全名。我经常遇到括号里的昵称。括号中可能还有我不想删除的其他数据。这是我正在使用的一种数据的示例:

Name <- c(
    "JOSEPH RYAN SMITH (USRID1)",
    "ANDREA J LOPEZ RAMIREZ (USRID2) (CONTRACTOR)",
    "TIMOTHY (TIM) JOHNSON (USRID3) (INTERN)",
    "JESSICA JENNIFER JONES (USRID4) (CONTRACTOR)",
    "WILLIAM (BILLIE) JOEL (USRID5)")
df <- as.data.frame(Name)

我得到:

                                         Name
1                   JOSEPH RYAN SMITH (USRID1)
2 ANDREA J LOPEZ RAMIREZ (USRID2) (CONTRACTOR)
3      TIMOTHY (TIM) JOHNSON (USRID3) (INTERN)
4 JESSICA JENNIFER JONES (USRID4) (CONTRACTOR)
5               WILLIAM (BILLIE) JOEL (USRID5)

我只想删除昵称。我注意到昵称的与众不同之处在于它总是放在括号中并且后面总是跟着姓氏。括号中包含的所有其他指示符后跟“(”或记录结尾。我尝试删除括号中后跟空格和字符 A-Z 的字符串。

df$Name <- str_remove(df$Name, "[\\(][A-Z]+[\\)][ ][A-Z]")

这删除了姓氏的第一个字母并给了我:

 Name
1                   JOSEPH RYAN SMITH (USRID1)
2 ANDREA J LOPEZ RAMIREZ (USRID2) (CONTRACTOR)
3             TIMOTHY OHNSON (USRID3) (INTERN)
4 JESSICA JENNIFER JONES (USRID4) (CONTRACTOR)
5                         WILLIAM OEL (USRID5)

我也没有成功地尝试过“不跟随(”,如下所示:

df$Name <- str_remove(df$Name, "[\\(][A-Z]+[\\)][ ][^\\(]")

我尝试了其他一些方法,删除了括号中我确实需要保留的其他指标。任何帮助表示赞赏。谢谢。

最佳答案

使用正向lookeahd (?=),以便姓氏的第一个字母匹配但不删除。

stringr::str_remove(df$Name, "\\([A-Z]+\\)\\s(?=[A-Z])")

#[1] "JOSEPH RYAN SMITH (USRID1)"                  
#[2] "ANDREA J LOPEZ RAMIREZ (USRID2) (CONTRACTOR)"
#[3] "TIMOTHY JOHNSON (USRID3) (INTERN)"           
#[4] "JESSICA JENNIFER JONES (USRID4) (CONTRACTOR)"
#[5] "WILLIAM JOEL (USRID5)" 

您还可以使用 sub 在基本 R 中编写此代码:

sub('\\([A-Z]+\\)\\s(?=[A-Z])', '', df$Name, perl = TRUE)

关于r - 如何使用 R 删除遵循特定模式但不包括另一个模式的字符串部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66379385/

相关文章:

scala - 如何通过编号而不是名称选择数据框中的列

regex - 如何在R中的list.files中执行复杂的正则表达式

r - 如何在水平条形图中绘制各个组件?

r - 更改ggplot中的线宽,而不是大小

javascript - 如何使用 javascript/jquery 从字符串中删除文本?

python - 将分组的聚合 nunique 列添加到 pandas 数据框

r - 重写 plot.factor 的技巧?

c# - 通过类字符串属性过滤

regex - .*(点星)如何工作?

python - 在 pandas DataFrame 中将某些值替换为 NaN 时如何避免数据类型转换?