正则表达式-在R中查找“ C”而不是“ JC”的匹配项

埃里克·艾伦

设置:

我正在使用正则表达式将棒球阵容组织到一个数据框中。

LINEUPS <- c('OF Andrew Johnson P Victor Bailey OF Walter Hill 2B Carl Smith 3B Brian Rivera P Joseph Cox 1B Steven Parker SS William Gonzales OF Christopher Taylor C David Washington
',
             'SS J.C. Roberts P Dennis Flores OF Jason Torres 2B Jack Rodriguez OF Randy Baker P Edward Anderson C David Washington 3B Thomas Wilson OF Ryan Walker 1B Robert Harris Jr
',
             '1B J.P. Allen P Philip Hernandez OF Ryan Walker OF Christopher Taylor 2B Jack Rodriguez C Russell James 3B Brian Rivera P Joseph Cox OF Andrew Johnson SS Ralph Martinez
')

mm <- gregexpr("\\b(P|C|OF|SS|1B|2B|3B)\\b", LINEUPS)
players <- do.call("rbind", unname(Map(function(x, m, i) {
  pstart <- m
  pend <- pstart + attr(m, "match.length")
  hstart <- pend + 1
  hend <- c(tail(pstart,-1)-1, nchar(x))
  data.frame(game=i, pos=substring(x, pstart, pend), name=substring(x, hstart, hend))
  
}, LINEUPS, mm, seq_along(LINEUPS))))
players$pos <- sub("^\\s|\\s+$","", players$pos)
players$name <- sub("^\\s|\\s+$","", players$name)

library(dplyr)
library(tidyr)

players <- players %>% 
  group_by(game, pos) %>% 
  mutate(pos=if_else(rep(n(),n())>1, paste0(pos, row_number()), pos)) %>% 
  pivot_wider(game, names_from=pos, values_from=name)

问题:

当玩家的名字中包含的首字母也恰好与其中一个位置匹配时,我就会遇到麻烦。在上面的示例中:SS J.C. Roberts匹配位置C1B J.P. Allen匹配position P,导致字符串被错误地分割。

问题:

如何修改当前搜索以排除这些匹配项,以便得到以下结果:

P1 <- c('Victor Bailey','Dennis Flores','Philip Hernandez')
P2 <- c('Joseph Cox','Edward Anderson','Joseph Cox')
C <- c('David Washington','David Washington','Russell James')
"1B" <- c('Steven Parker','Robert Harris Jr', 'J.P. Allen')
"2B" <- c('Carl Smith','Jack Rodriguez','Jack Rodriguez')
"3B" <- c('Brian Rivera','Thomas Wilson','Brian Rivera')
SS <- c('William Gonzales','J.C. Roberts','Ralph Martinez')
OF1 <- c('Andrew Johnson','Jason Torres','Ryan Walker')
OF2 <- c('Walter Hill','Randy Baker','Christopher Taylor')
OF3 <- c('Christopher Taylor','Ryan Walker','Andrew Johnson')

RESULT <- data.frame(P1, P2, C, `1B`, `2B`, `3B`, SS, OF1, OF2, OF3)
Ryszard捷克

假设您要匹配C整个单词,而不是整个单词J.C.

采用

\bC\b(?<!\bJ\.C(?=\.))

证明使用您的正则表达式:

\b(P|C|OF|SS|1B|2B|3B)\b(?<!\bJ\.C(?=\.))

看到这个演示

在您的代码中:

mm <- gregexpr("\\b(P|C|OF|SS|1B|2B|3B)\\b(?<!\\bJ\\.C(?=\\.))", LINEUPS, perl=TRUE)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R-如何在正则表达式匹配项中使用Apply而不是for循环

来自分类Dev

Python正则表达式:在一行而不是列表中返回匹配项?

来自分类Dev

正则表达式在C#中不匹配

来自分类Dev

C中的正则表达式匹配

来自分类Dev

C#中的正则表达式匹配空格

来自分类Dev

无法在C中匹配正则表达式

来自分类Dev

正则表达式:匹配 C# 中的引号

来自分类Dev

使用正则表达式顺序匹配正则表达式,而不是JavaScript中的字符串顺序

来自分类Dev

使用C ++正则表达式查找首个匹配项的索引

来自分类Dev

C ++ std :: regex正则表达式查找多个匹配项

来自分类Dev

使用C#中的正则表达式返回包含匹配项的整行

来自分类Dev

Objective-C中的正则表达式:如何用动态模板替换匹配项?

来自分类Dev

正则表达式匹配| 但||不是

来自分类Dev

从正则表达式获取“组”,而不是匹配项

来自分类Dev

正则表达式查找最长的匹配项

来自分类Dev

使用正则表达式查找匹配项-Perl

来自分类Dev

查找所有正则表达式匹配项

来自分类Dev

正则表达式查找最长的匹配项

来自分类Dev

使用正则表达式查找多个匹配项

来自分类Dev

查找所有正则表达式匹配项

来自分类Dev

C#枚举正则表达式匹配项

来自分类Dev

C#枚举正则表达式匹配项

来自分类Dev

正则表达式中多个匹配项的混淆

来自分类Dev

正则表达式用字符串C#中的数字匹配多个匹配项

来自分类Dev

R:如何匹配正则表达式而不是子字符串

来自分类Dev

Java 中的正则表达式模式匹配单个字母而不是完整的单词。

来自分类Dev

匹配文件名而不是python正则表达式中的子字符串

来自分类Dev

如果正则表达式匹配A而不是正则表达式B,则Perl打印

来自分类Dev

C#中的正则表达式仅返回第一个匹配项

Related 相关文章

  1. 1

    R-如何在正则表达式匹配项中使用Apply而不是for循环

  2. 2

    Python正则表达式:在一行而不是列表中返回匹配项?

  3. 3

    正则表达式在C#中不匹配

  4. 4

    C中的正则表达式匹配

  5. 5

    C#中的正则表达式匹配空格

  6. 6

    无法在C中匹配正则表达式

  7. 7

    正则表达式:匹配 C# 中的引号

  8. 8

    使用正则表达式顺序匹配正则表达式,而不是JavaScript中的字符串顺序

  9. 9

    使用C ++正则表达式查找首个匹配项的索引

  10. 10

    C ++ std :: regex正则表达式查找多个匹配项

  11. 11

    使用C#中的正则表达式返回包含匹配项的整行

  12. 12

    Objective-C中的正则表达式:如何用动态模板替换匹配项?

  13. 13

    正则表达式匹配| 但||不是

  14. 14

    从正则表达式获取“组”,而不是匹配项

  15. 15

    正则表达式查找最长的匹配项

  16. 16

    使用正则表达式查找匹配项-Perl

  17. 17

    查找所有正则表达式匹配项

  18. 18

    正则表达式查找最长的匹配项

  19. 19

    使用正则表达式查找多个匹配项

  20. 20

    查找所有正则表达式匹配项

  21. 21

    C#枚举正则表达式匹配项

  22. 22

    C#枚举正则表达式匹配项

  23. 23

    正则表达式中多个匹配项的混淆

  24. 24

    正则表达式用字符串C#中的数字匹配多个匹配项

  25. 25

    R:如何匹配正则表达式而不是子字符串

  26. 26

    Java 中的正则表达式模式匹配单个字母而不是完整的单词。

  27. 27

    匹配文件名而不是python正则表达式中的子字符串

  28. 28

    如果正则表达式匹配A而不是正则表达式B,则Perl打印

  29. 29

    C#中的正则表达式仅返回第一个匹配项

热门标签

归档