匹配括号前的所有内容

17

给定一个字符串 str = "高级软件工程师 (山景城)"

如何匹配直到第一个括号出现的所有内容,返回 "高级软件工程师"?


纯正则表达式:^[^(]+r 实现留给其他人... - Wrikken
6
请不要编辑你的标题,加上像“[已回答]”这样的内容。那就是答案旁边的勾号的作用。请使用它们! - joran
7个回答

30

您可以使用^[^\(]+来匹配,然后修剪它以删除尾随空格。


它有效!具体来说,regmatches(str,regexpr(“ ^ [^ \(]+”,str))[[1]]; - user1103294
为什么第一个“^”是必要的? - Swadq
@Swadq 它匹配行的开头。如果没有它,您还将匹配 ( 后面的所有内容。 - DiverseAndRemote.com
啊,没错 ^^ 我会编辑我的答案,以免混淆后来的读者。 - Swadq

8

^[^\(]*

[^\(]是一个字符类,它匹配除了(以外的所有内容。*表示贪婪匹配,尽可能多地匹配该字符类。而开头的^表示从字符串的开头开始匹配。


5
为了避免末尾空格,请尝试使用^.*?(?=\s\()^(.*?)告诉它尽可能少地匹配字符,从字符串开头开始,并且(?=\s\()将匹配的另一端固定在您的括号上,不捕获它或其前面的空格。

4
您可以在R中使用这个简单的正则表达式:*\\(.*
str <- "Senior Software Engineer (mountain view)"

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

它还避免了末尾的空格。

错误:sub未定义。 - Andor Németh

1

如果您想匹配括号前后的所有内容,请尝试以下方法:

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

替换为:\1

如果您想匹配所有括号并将其删除,请尝试以下方法:

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

替换为:(留空)


1
一种整洁的宇宙方式...
library("stringr")

以下代码的输出将返回一个列表...
str_match_all(str, "^[^\\(]+")

如果你需要字符串。
str_match_all(str, "^[^\\(]+") %>% toString()

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接