【发布时间】:2012-12-13 20:24:22
【问题描述】:
给定一个字符串str = "Senior Software Engineer (mountain view)"
如何匹配所有内容,直到我点击第一个括号,返回“高级软件工程师”
【问题讨论】:
-
普通正则表达式:
^[^(]+,r实现我留给其他人... -
请勿使用“[已回答]”之类的内容编辑标题。这就是答案旁边的复选标记的用途。使用它们!
给定一个字符串str = "Senior Software Engineer (mountain view)"
如何匹配所有内容,直到我点击第一个括号,返回“高级软件工程师”
【问题讨论】:
^[^(]+, r 实现我留给其他人...
您可以使用 ^[^\(]+ 来匹配它,然后修剪它以删除尾随空格
【讨论】:
^?
( 之后的所有内容
^[^\(]*
[^\(] 是一个字符类,匹配除( 之外的所有内容,而* 是一个贪婪匹配,它尽可能多次匹配该类。开头的^ 匹配字符串的开头。
【讨论】:
要避免尾随空格,请尝试^.*?(?=\s\()。
^(.*?) 告诉它从字符串的开头匹配尽可能少的字符,(?=\s\() 将匹配的另一端锚定到您的括号,而不捕获它或它之前的空格。
【讨论】:
您可以在 R 中使用这个简单的正则表达式:*\\(.*
str <- "Senior Software Engineer (mountain view)"
sub(" *\\(.*", "", str)
# [1] "Senior Software Engineer"
它还避免了尾随空格。
【讨论】:
一个整洁的方式...
library("stringr")
下面的输出,将返回您的列表...
str_match_all(str, "^[^\\(]+")
如果你需要在字符串中
str_match_all(str, "^[^\\(]+") %>% toString()
【讨论】:
如果你想匹配括号之前和之后的所有内容,试试这个:
搜索:^[^\(]+|(\)).*
替换为:\1
如果你想匹配所有括号并删除它们,试试这个:
搜索:\([^(\r\n]*?\)|\(|\)
替换为:(LEAVE EMPTY)
【讨论】:
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
【讨论】: