无法从R

时间:2019-05-30 19:40:54

标签: r regex stringr

我正在尝试找出用于从文本中提取名称的正则表达式。每个名称都有一个名字首字母,一个句点和一个姓氏,后跟一个似乎是空格()的代码,由于某种原因,当我将csv上传到R时会显示出来。

以下是文本布局的四个示例:

D. Nowitzki<U+00A0>misses 2-pt jump shot from 17 ft
J. Calderon<U+00A0>misses 2-pt jump shot from 12 ft
Turnover by<U+00A0>M. Ellis<U+00A0>(bad pass; steal by<U+00A0>T. 
Splitter)

防守篮板。马里恩

    data$Player <- sub("(.*\\..*)<", "\\1", data$Play)

    data$Player <- sub("(.*\\..*)<", "\\1", data$Play)

1 个答案:

答案 0 :(得分:2)

您的模式(.*\..*)<将尽可能多的0+个字符捕获到组1,然后捕获一个.字符,然后将尽可能多的0+字符捕获,然后再捕获一个{{1} }被匹配。因此,您匹配了很多文本,并且不清楚<是文字文本还是它代表数据中不间断空格的实体。如果后者为true,则您的模式不匹配,因为没有<U+00A0>

我假设您要提取第一个匹配项,以整个单词开头的字母开头,然后是一个点,然后是0或多个空格,然后是1+个字母。因此,您可以使用

<

请参见regex demo

详细信息

  • \b\p{Lu}\.\s*\p{L}+ -单词边界
  • \b-任何大写Unicode字母 -\p{Lu}-点
  • \.-超过0个空格
  • \s*-任意1个以上Unicode字母

在R中,您可以轻松地将模式与\p{L}+一起使用,该模式仅提取第一个匹配项:

stringr::str_extract