我有一个字符串:
myString = "2 word1 & 4 word2"
myString = "4 word2"
myString = "2 word1"
我想获得word1之前的数字和word2之前的数字
number1 = 2
number2 = 4
如何处理R
中的正则表达式我试过这样的东西,但它只得到第一个数字
gsub("([0-9]+).*", "\\1", myString)
答案 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=" "