R子串基于正则表达式

时间:2018-02-25 18:56:04

标签: r regex dataframe

我有一个字符串:

myString = "2 word1 & 4 word2"
myString = "4 word2"
myString = "2 word1"

我想获得word1之前的数字和word2之前的数字

number1 = 2
number2 = 4

如何处理R

中的正则表达式

我试过这样的东西,但它只得到第一个数字

 gsub("([0-9]+).*", "\\1", myString)

3 个答案:

答案 0 :(得分:3)

您可以使用具有前瞻的正则表达式提取特定字符串之前的特定数字

> word1_res <- str_extract_all(myString, "\\d+(?=\\s*word1)")
> word1_res
[[1]]
[1] "2"

[[2]]
character(0)

[[3]]
[1] "2"

可以类似地检索word2的结果:

word2_res <- str_extract_all(myString, "\\d+(?=\\s*word2)")

<强>详情

  • \d+ - 一位或多位数字......
  • (?=\\s*word2) - 如果紧接着:
    • \s* - 0+ whitespaces
    • word2 - 文字word2子字符串。

基础R等价物是

regmatches(myString, gregexpr("\\d+(?=\\s*word1)", myString, perl=TRUE))
regmatches(myString, gregexpr("\\d+(?=\\s*word2)", myString, perl=TRUE))

sub几乎相同的解决方案

> sub(".*?(\\d+)\\s*word1.*|.*","\\1",myString)
[1] "2" ""  "2"
> sub(".*?(\\d+)\\s*word2.*|.*","\\1",myString)
[1] "4" "4" "" 

请注意,这意味着每个字符串只有一个结果,而str_extract_all将从字符串中获取所有匹配项。

使用带有stringr的{​​{1}}解决方案提取任意1 +位数字作为整个单词

str_extract_all

或带有library(stringr) str_extract_all(myString, "\\b\\d+\\b") / regmatches的基础R:

gregexpr

查看online R demo。输出:

myString <- c("2 word1 & 4 word2", "4 word2", "2 word1")
regmatches(myString, gregexpr("\\b\\d+\\b", myString))

<强>详情

  • [[1]] [1] "2" "4" [[2]] [1] "4" [[3]] [1] "2" - 字边界
  • \b - 一位或多位
  • \d+ - 一个单词边界。

答案 1 :(得分:1)

myString = "2 word1 & 4 word2"
number1 = gsub("([0-9]+).*", "\\1", myString)
myString = "4 word2"
number2 = gsub("([0-9]+).*", "\\1", myString)
myString = "2 word1"
number3 = gsub("([0-9]+).*", "\\1", myString)
print(number1)
print(number2)
print(number3)

如果为myString分配3次字符串,myString将只包含最后一个字符串。

答案 2 :(得分:0)

这将删除每次出现的字母或&符号,可能后跟其他非空格字符,然后扫描剩下的内容。扫描还会将它们转换为数字。没有包使用。

<ImageView android:id="@+id/icon"   
        android:layout_width="25dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="12dp"
        android:layout_marginRight="12dp"
        android:src="@drawable/menu_tip"   <-- the error is here
        android:layout_centerVertical="true"/>

,并提供:

android:src=" "