Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 最多再提取两个数字_R_Regex - Fatal编程技术网

R 最多再提取两个数字

R 最多再提取两个数字,r,regex,R,Regex,这可能是一个非常简单的问题,但我对正则表达式没有太多经验。这是一个很好的正则表达式源代码,但无法理解如何将它们包含到我的以下代码中: data %>% filter(grepl("^A01H1", icl)) 问题 我想提取我的数据框架的一列中的值,从这个A01H1开始,最多再提取两位数字,例如A01H100、A01H140、A01H110。尽管我做了几次尝试,但仍未能找到解决方案: 尝试 我看了一下,然后用^A01H1[0-9]。{2}选择了最多两个数字 我尝试添加任何字符^A01H1

这可能是一个非常简单的问题,但我对正则表达式没有太多经验。这是一个很好的正则表达式源代码,但无法理解如何将它们包含到我的以下代码中:

data %>% filter(grepl("^A01H1", icl))
问题

我想提取我的
数据
框架的一列中的值,从这个
A01H1
开始,最多再提取两位数字,例如
A01H100、A01H140、A01H110
。尽管我做了几次尝试,但仍未能找到解决方案:

尝试

我看了一下,然后用
^A01H1[0-9]。{2}
选择了最多两个数字

我尝试添加任何字符
^A01H1[0-9][0-9][x-y]
以在两位数后停止

任何帮助都将不胜感激:)

您可以使用
“^A01H1\\d{1,2}$”
。 第一部分(
“^A01H1”
)是您自己弄明白的,那么我们在第二部分(
“\\d{1,2}$”
)中做什么呢

  • \d
    包括所有数字,相当于
    [0-9]
    ,因为我们在R中工作,您需要转义
    \
    ,因此我们使用
    \\d
  • {1,2}
    表示我们希望有一个或两个匹配的
    \\d
  • $
    指定字符串的结尾,因此后面不应出现任何内容,这将阻止匹配超过2个数字
您可以使用
“^A01H1\\d{1,2}$”
。 第一部分(
“^A01H1”
)是您自己弄明白的,那么我们在第二部分(
“\\d{1,2}$”
)中做什么呢

  • \d
    包括所有数字,相当于
    [0-9]
    ,因为我们在R中工作,您需要转义
    \
    ,因此我们使用
    \\d
  • {1,2}
    表示我们希望有一个或两个匹配的
    \\d
  • $
    指定字符串的结尾,因此后面不应出现任何内容,这将阻止匹配超过2个数字

看起来您想要匹配字符串的一部分,该部分以
A01H1
开头,然后包含1或2个数字,后面不跟任何数字

你可以用

^A01H1\d{1,2}(?!\d)
如果两位数字后根本没有文本,则将
(?!\d)
替换为
$

详细信息

  • ^
    -开始施压
  • A01H1
    -文字字符串
  • \d{1,2}
    -一到两位数字
  • (?!\d)
    -右边不允许立即出现数字
  • $
    -字符串结尾
在R中,你可以像这样使用它

grepl("^A01H1\\d{1,2}(?!\\d)", icl, perl=TRUE)
或者,使用绳端锚

grepl("^A01H1\\d{1,2}$", icl)

请注意,
perl=TRUE
仅在使用PCRE特定语法(如
(?!\d)
)时才是必需的,这是一种负前瞻。

它看起来像是要匹配字符串的一部分,该部分以
A01H1
开头,然后包含1或2个数字,后面没有任何数字

你可以用

^A01H1\d{1,2}(?!\d)
如果两位数字后根本没有文本,则将
(?!\d)
替换为
$

详细信息

  • ^
    -开始施压
  • A01H1
    -文字字符串
  • \d{1,2}
    -一到两位数字
  • (?!\d)
    -右边不允许立即出现数字
  • $
    -字符串结尾
在R中,你可以像这样使用它

grepl("^A01H1\\d{1,2}(?!\\d)", icl, perl=TRUE)
或者,使用绳端锚

grepl("^A01H1\\d{1,2}$", icl)

请注意,
perl=TRUE
仅在使用PCRE特定语法时才是必需的,例如
(?!\d)
,一种负前瞻。

^A01H1.*\d{2}
^A01H1\d{1,2}
^A01H1\d{1,2}(?!\d)
?您希望在
A01H1
和两位数字之间有文本吗?您希望在两位数字之后有文本吗?
“^A01H1\\d{1,2}$”
?请提供一个简短的示例,其中包含应匹配和不应匹配的值;)这个
“^A01H1\\d{1,2}$”
工作得很好,你能进一步解释一下吗??不幸的是,这些
^A01H1.*.\d{2}
^A01H1\d{1,2}
^A01H1\d{1,2}(?!\d)
不起作用。您是否正确尝试了它们
grepl(“^A01H1\\d{1,2}(?)\\d)”,icl,perl=TRUE)
^A01H1.*\d{2}
^A01H1\d{1,2}
^A01H1\d{1,2}(?)
?您希望在
A01H1
和两位数字之间有文本吗?您希望在两位数字之后有文本吗?
“^A01H1\\d{1,2}$”
?请提供一个简短的示例,其中包含应匹配和不应匹配的值;)这个
“^A01H1\\d{1,2}$”
工作得很好,你能进一步解释一下吗??不幸的是,这些
^A01H1.*.\d{2}
^A01H1\d{1,2}
^A01H1\d{1,2}(?!\d)
不起作用。您是否正确尝试了它们
grepl(^A01H1\\d{1,2}(?!\\d)”,icl,perl=TRUE)