我正在试图找出如何在字符串中提取名称:
str <- "Bob 1/4 F4 Mary Lou 5/1 Thomas Tank 66/19"
到一个向量: “Bob”,“Mary Lou”,“Thomas Tank”
我有以下内容返回“Bob”。谁能告诉我如何在全球范围内匹配以下内容?
cVec <- ""
findMatch <- regexpr("[^0-9]+", str)
cVec <- append(cVec, regmatches(str,findMatch))
cVec
理想情况下,我想要一个包含名称和分数元素的列表,例如 “鲍勃”,“1/4” “Mary Lou”,“5/1” “托马斯坦克”,“66/19” 但我怀疑F4会很困难(不需要)。我会满足于这些名字!
干杯。
答案 0 :(得分:4)
您可以使用以下命令提取名称和分数:
regmatches(str, gregexpr("[[:alpha:]]+( [[:alpha:]]+)?\\b|\\d+/\\d+", str))
# [[1]]
# [1] "Bob" "1/4" "Mary Lou" "5/1" "Thomas Tank"
# [6] "66/19"
答案 1 :(得分:2)
我不知道R,所以我无法为您提供实施。但是,我认为可以用这个正则表达式做出解决方案:
(?<=^| )[a-zA-Z]+(?: [a-zA-Z]+)?(?= |$)|[0-9]+/[0-9]+
它将匹配Bob
,1/4
,Mary Lou
,5/1
,Thomas Tank
和66/19
,但不匹配F4
在线解释和演示:http://regex101.com/r/vB8rU5
答案 2 :(得分:0)
我不熟悉R的正则表达式语法,但以下Java正则表达式匹配整个表达式(\s
表示空格; \d
表示数字,{{1} }; [0-9]
是一个群体; R似乎同意):
()
在Java中,有"([A-Za-z]+\\s)+(\\d+/\\d+(\\s[A-Z][\\d+])?)"
方法,可以让您浏览模式匹配。在R中,我认为它是find
,除了这给你一个索引列表,而不是字符串本身。
答案 3 :(得分:0)
在一天结束时,这是模糊的方式,以提供可靠/通用的解决方案。但这可以解决问题,你只需修改名称:
> strsplit(str, "[0-9][ 0-9F/]+[0-9]")[[1]]
[1] "Bob " " Mary Lou " " Thomas Tank "
正则表达式定义了拆分的样子。
答案 4 :(得分:0)
str <- "Bob 1/4 F4 Mary Lou 5/1 Thomas Tank 66/19"
m<-gregexpr("(?i)\\b[a-z]+(?: [a-z]+)*\\b", str)
regmatches(str, m)