给定一个字符串str = "Senior Software Engineer (mountain view)"
我如何才能匹配所有内容,直到我打到第一个括号,让我回到“高级软件工程师”
你会用^[^\(]+
它来匹配它,然后修剪它以删除尾随空格
^[^\(]*
[^\(]
是一个字符类,它匹配除 , 之外的所有内容(
,并且*
是一个贪婪匹配,它尽可能多次匹配该类。^
开头的 匹配字符串的开头。
您可以在 R 中使用这个简单的正则表达式:*\\(.*
str <- "Senior Software Engineer (mountain view)"
sub(" *\\(.*", "", str)
# [1] "Senior Software Engineer"
它还避免了尾随空格。
要避免尾随空格,请尝试^.*?(?=\s\()
.
^(.*?)
告诉它从字符串的开头匹配尽可能少的字符,并将(?=\s\()
匹配的另一端锚定到您的括号,而不捕获它或它之前的空格。
一个整洁的方式...
library("stringr")
下面的输出将返回您的列表...
str_match_all(str, "^[^\\(]+")
如果你需要在字符串
str_match_all(str, "^[^\\(]+") %>% toString()
软件包unglue提供了一个可读的替代方案:
# install.packages("unglue")
library(unglue)
x <- "Senior Software Engineer (mountain view)"
unglue_vec(x,"{job} ({location})", var = "job")
#> [1] "Senior Software Engineer"
更多信息:https ://github.com/moodymudskipper/unglue/blob/master/README.md
如果你想匹配括号之前和之后的所有内容,试试这个:
搜索: ^[^\(]+|(\)).*
替换为: \1
如果你想匹配所有括号并删除它们,试试这个:
搜索:\([^(\r\n]*?\)|\(|\)
替换为: (LEAVE EMPTY)