首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式,以找到包含空格和标点符号的精确匹配

正则表达式,以找到包含空格和标点符号的精确匹配
EN

Stack Overflow用户
提问于 2017-09-01 12:06:40
回答 1查看 229关注 0票数 2

我正在浏览一个包含文本值(名称)的数据集,这些文本值(名称)的格式如下所示:

代码语言:javascript
复制
M.Joan (13-2)  
A.Alfred (20-13)  
F.O'Neil (12-231)  
D.Dan Fun (23-3)
T.Collins (51-82) J.Maddon (12-31)

有些字符串中有两个名称,如下

代码语言:javascript
复制
 M.Joan (13-2) A.Alfred (20-13)

我只想从字符串中提取名称。有些名字很容易提取,因为它们没有空格或任何东西。然而,有些人很难,因为他们有一个像上面最后一个一样的空间。

代码语言:javascript
复制
name_pattern = "[A-Z][.][^ (]{1,}"
base <- str_extract_all(baseball1$Managers, name_pattern)

当我使用此代码提取名称时,即使是带有空格或标点符号的名称,它也能很好地工作。但是,提取的名称在末尾有一个空格。我想知道是否能找到“(",空格和括号)的确切模式。

输出:

代码语言:javascript
复制
[[1]]
[1] "Z.Taylor "

[[2]]
[1] "Z.Taylor "

[[3]]
[1] "Z.Taylor "

[[4]]
[1] "Z.Taylor "

[[5]]
[1] "Y.Berra "

[[6]]
[1] "Y.Berra "
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-01 12:19:30

你可以用

代码语言:javascript
复制
x <- c("M.Joan (13-2) ", "A.Alfred (20-13)", "F.O'Neil (12-231)", "D.Dan Fun (23-3)", "T.Collins (51-82) J.Maddon (12-31)", "T.Hillman (12-34) and N.Yost (23-45)")
regmatches(x, gregexpr("\\p{Lu}.*?(?=\\s*\\()", x, perl=TRUE))

regex演示

或者str_extract_all版本:

代码语言:javascript
复制
str_extract_all(baseball1$Managers, "\\p{Lu}.*?(?=\\s*\\()")

regex演示

相配

  • \p{Lu} -大写字母
  • .*? -除行中断字符以外的任何字符,尽可能少,直到第一次出现(但不包括在匹配中,因为(?=...)是一个不消耗的构造).
  • (?=\\s*\\() -在当前位置的右侧,正向前瞻要求存在:
    • \\s* - 0+空白字符
    • \\( -一个字面上的(

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45999983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档