Select 由两个空格括起来的子字符串
Select substring bracketed by two whitespaces
我在 R 中使用正则表达式。
我的问题有点类似于this one,但我需要一个更具体的解决方案。我有一个字符向量。每个字符串的格式如下:
"text text1 text2 text3"
文本块之间有很多白色space。我想从每个字符串中提取 text1。 Text1 的两边总是至少有两个白色space,但其他所有文本块也是如此。 Text1 的名称类似于 "Monty Python":可能包含一个 space,但绝不会包含两个 space。
我正在使用 stringr
,str_extract
函数仅提取模式的第一次出现。但我不确定如何指定我的模式。我试了str_extract(z, "\s{2,}[a-z]*\s{2,}")
,表示我想要白色space之间至少有一个字母。这导致了 NA。有没有办法隔离 text1?
您需要确认字母大小写,因为您的子字符串可能有 lower/upper 个大小写字母,并包含一个可选的组构造以匹配子字符串的第二个单词实例。
字符向量(基于您对输入的描述):
x <- c('foo Monty Python baz quz',
'foo Monty baz quz')
使用 stringr 包:
str_trim(str_extract(x, "\s{2,}[a-zA-Z]+( [a-zA-Z]+)?\s{2,}"))
# [1] "Monty Python" "Monty"
使用 base R 中的正则表达式:
trimws(regmatches(x, gregexpr('\s{2,}[a-zA-Z]+( [a-zA-Z]+)?\s{2,}', x)))
# [1] "Monty Python" "Monty"
虽然,我只是简单地在这里使用 strsplit:
sapply(strsplit(x, '\s{2,}'), '[', 2)
# [1] "Monty Python" "Monty"
我在 R 中使用正则表达式。
我的问题有点类似于this one,但我需要一个更具体的解决方案。我有一个字符向量。每个字符串的格式如下:
"text text1 text2 text3"
文本块之间有很多白色space。我想从每个字符串中提取 text1。 Text1 的两边总是至少有两个白色space,但其他所有文本块也是如此。 Text1 的名称类似于 "Monty Python":可能包含一个 space,但绝不会包含两个 space。
我正在使用 stringr
,str_extract
函数仅提取模式的第一次出现。但我不确定如何指定我的模式。我试了str_extract(z, "\s{2,}[a-z]*\s{2,}")
,表示我想要白色space之间至少有一个字母。这导致了 NA。有没有办法隔离 text1?
您需要确认字母大小写,因为您的子字符串可能有 lower/upper 个大小写字母,并包含一个可选的组构造以匹配子字符串的第二个单词实例。
字符向量(基于您对输入的描述):
x <- c('foo Monty Python baz quz',
'foo Monty baz quz')
使用 stringr 包:
str_trim(str_extract(x, "\s{2,}[a-zA-Z]+( [a-zA-Z]+)?\s{2,}"))
# [1] "Monty Python" "Monty"
使用 base R 中的正则表达式:
trimws(regmatches(x, gregexpr('\s{2,}[a-zA-Z]+( [a-zA-Z]+)?\s{2,}', x)))
# [1] "Monty Python" "Monty"
虽然,我只是简单地在这里使用 strsplit:
sapply(strsplit(x, '\s{2,}'), '[', 2)
# [1] "Monty Python" "Monty"