我正在尝试找出用于从文本中提取名称的正则表达式。每个名称都有一个名字首字母,一个句点和一个姓氏,后跟一个似乎是空格()的代码,由于某种原因,当我将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)
答案 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