Regex 正则表达式stringr获取数字旁边的字母

Regex 正则表达式stringr获取数字旁边的字母,regex,r,Regex,R,在R中,我想使用grep或'grepl'或'gsub'命令来查找字符串向量中的所有元素,这些元素中包含a road或M road或B road名称 请参见下面的示例 tmp <- c('Little Street','A323', 'Essex Road (A43)', 'M43','Orange street','M4','B2045','New Street') 我的第一个想法是使用 grepl('[0-9]',tmp) 但这无法区分A路、B路和M路 一如既往,我们将非常感谢您的帮

在R中,我想使用
grep
或'grepl'或'gsub'命令来查找字符串向量中的所有元素,这些元素中包含a road或M road或B road名称

请参见下面的示例

tmp <- c('Little Street','A323', 'Essex Road (A43)', 'M43','Orange street','M4','B2045','New Street')
我的第一个想法是使用

grepl('[0-9]',tmp)
但这无法区分A路、B路和M路

一如既往,我们将非常感谢您的帮助……

这个怎么样

tmp <- c('Little Street','A323', 'Essex Road (A43)', 'M43','Orange street','M4','B2045','New Street')

road <- rep("Minor", length(tmp))
m <- regexpr("\\b[ABM]\\d+", tmp)
road[m!=-1] <- substr(regmatches(tmp, m),1,1)
paste(road, "Road")
tmp这个怎么样

tmp <- c('Little Street','A323', 'Essex Road (A43)', 'M43','Orange street','M4','B2045','New Street')

road <- rep("Minor", length(tmp))
m <- regexpr("\\b[ABM]\\d+", tmp)
road[m!=-1] <- substr(regmatches(tmp, m),1,1)
paste(road, "Road")

tmp这可以在一个strapply语句中完成,该语句为每个输入组件返回一个字母,后跟一个数字。对于任何不匹配的部件,请使用
“次要道路”

给予:

[1] "Minor Road" "A Road"     "A Road"     "M Road"     "Minor Road"
[6] "M Road"     "B Road"     "Minor Road"

更新:将答案简化为一条语句。

这可以在一条strapply语句中完成,该语句为每个具有字母后跟数字的输入组件返回字母后跟
“Road”
。对于任何不匹配的部件,请使用
“次要道路”

给予:

[1] "Minor Road" "A Road"     "A Road"     "M Road"     "Minor Road"
[6] "M Road"     "B Road"     "Minor Road"

更新:将答案简化为一句话。

您可以使用
grepl
sub
将其分解为多个步骤

> tmp[!grepl('[ABM]\\d', tmp)] <- 'Minor Road'
> sub('.*([ABM])\\d.*', '\\1 Road', tmp)
# [1] "Minor Road" "A Road"     "A Road"     "M Road"     "Minor Road"
# [6] "M Road"     "B Road"     "Minor Road"
>tmp[!grepl('[ABM]\\d',tmp)]sub('.*([ABM])\\d.''.'\\1 Road',tmp)
#[1]“次要道路”“A道路”“A道路”“M道路”“次要道路”
#[6]“M路”“B路”“次要道路”

您可以使用
grepl
sub
将其分解为多个步骤

> tmp[!grepl('[ABM]\\d', tmp)] <- 'Minor Road'
> sub('.*([ABM])\\d.*', '\\1 Road', tmp)
# [1] "Minor Road" "A Road"     "A Road"     "M Road"     "Minor Road"
# [6] "M Road"     "B Road"     "Minor Road"
>tmp[!grepl('[ABM]\\d',tmp)]sub('.*([ABM])\\d.''.'\\1 Road',tmp)
#[1]“次要道路”“A道路”“A道路”“M道路”“次要道路”
#[6]“M路”“B路”“次要道路”
使用可能会使这类任务稍微简单一些

tmp <- c('Little Street','A323', 'Essex Road (A43)', 'M43','Orange street','M4','B2045','New Street')

library(rex)
classify_road <- function(x) {
  res <- re_matches(x,
    rex(
      capture(name = "type",
        upper
      ),
      digit
    )
  )

  res$type[ is.na(res$type) ] <- "Minor"
  paste(res$type, "Road")
}

classify_road(tmp)
#>[1] "Minor Road" "A Road"     "A Road"     "M Road"     "Minor Road"
#>[6] "M Road"     "B Road"     "Minor Road"
tmp使用可能会使这类任务稍微简单一些

tmp <- c('Little Street','A323', 'Essex Road (A43)', 'M43','Orange street','M4','B2045','New Street')

library(rex)
classify_road <- function(x) {
  res <- re_matches(x,
    rex(
      capture(name = "type",
        upper
      ),
      digit
    )
  )

  res$type[ is.na(res$type) ] <- "Minor"
  paste(res$type, "Road")
}

classify_road(tmp)
#>[1] "Minor Road" "A Road"     "A Road"     "M Road"     "Minor Road"
#>[6] "M Road"     "B Road"     "Minor Road"

tmp我看不到您的输入和预期输出之间的联系。我的意思是,如果输入中没有辅助道路,如何获得辅助道路?也许这是因为我从来没有使用过R…次要道路是指任何不是A路、B路或M路的东西我看不出你的输入和预期输出之间的联系。我的意思是,如果输入中没有辅助道路,如何获得辅助道路?嗯,也许那是因为我从来没有使用过R…次要道路是指任何不是A路、B路或M路的东西