16

给定一个字符串str = "Senior Software Engineer (mountain view)"

我如何才能匹配所有内容,直到我打到第一个括号,让我回到“高级软件工程师”

4

7 回答 7

27

你会用^[^\(]+它来匹配它,然后修剪它以删除尾随空格

于 2012-12-13T20:26:16.513 回答
8

^[^\(]*

[^\(]是一个字符类,它匹配除 , 之外的所有内容(,并且*是一个贪婪匹配,它尽可能多次匹配该类。^开头的 匹配字符串的开头。

于 2012-12-13T20:28:07.167 回答
5

您可以在 R 中使用这个简单的正则表达式:*\\(.*

str <- "Senior Software Engineer (mountain view)"

sub(" *\\(.*", "", str)
# [1] "Senior Software Engineer"

它还避免了尾随空格。

于 2014-01-29T13:15:49.317 回答
5

要避免尾随空格,请尝试^.*?(?=\s\().

^(.*?)告诉它从字符串的开头匹配尽可能少的字符,并将(?=\s\()匹配的另一端锚定到您的括号,而不捕获它或它之前的空格。

于 2012-12-13T20:35:55.947 回答
1

一个整洁的方式...

library("stringr")

下面的输出将返回您的列表...

str_match_all(str, "^[^\\(]+")

如果你需要在字符串

str_match_all(str, "^[^\\(]+") %>% toString()
于 2019-07-16T16:22:12.997 回答
0

软件包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

于 2019-11-06T12:59:10.130 回答
0

如果你想匹配括号之前和之后的所有内容,试试这个:

搜索: ^[^\(]+|(\)).*

替换为: \1

如果你想匹配所有括号并删除它们,试试这个:

搜索:\([^(\r\n]*?\)|\(|\)

替换为: (LEAVE EMPTY)

于 2019-02-09T10:52:07.343 回答