我想寫一個正則表達式,將匹配和捕捉我下面......捕捉重複組
字符串:17 + 18 + 19 + 5 + 21
號在這裏拍攝(單獨)出現在陣列中 - [17,18,21]。
請注意,字符串可以是n個字符長(遵循\ d +的相同模式),並且這些數字在字符串中的順序不固定。
在此先感謝
我想寫一個正則表達式,將匹配和捕捉我下面......捕捉重複組
字符串:17 + 18 + 19 + 5 + 21
號在這裏拍攝(單獨)出現在陣列中 - [17,18,21]。
請注意,字符串可以是n個字符長(遵循\ d +的相同模式),並且這些數字在字符串中的順序不固定。
在此先感謝
如何簡單:
(17|18|21)
它需要一個全球性的比賽,所以在珍珠這將是這樣的:
$string =~ m/(17|18|21)/g
例字符串:
21+18+19+5+21+18+19+17
匹配:
"21", "18", "21", "18", "17"
工作正則表達式的例子:
感謝您的解決方案..工作正常:)我只是忽略了全球比賽(杜) – user1755645
鑑於此設置:
library(gsubfn)
s <- "17+18+19+5+21"
a <- c(17, 18, 21)
1)試試這個:
L <- as.list(c(setNames(a, a), NA))
strapply(s, "\\d+", L, simplify = na.omit)
,並提供:
[1] 17 18 21
attr(,"na.action")
[1] 3 4
attr(,"class")
[1] "omit"
2)或此:
pat <- paste(a, collapse = "|")
strapplyc(s, pat, simplify = as.numeric)
,並提供:
[1] 17 18 21
3)或該非正則表達式溶液
intersect(scan(text = s, what = 0, sep = "+", quiet = TRUE), a)
給予
[1] 17 18 21
ADDED附加解決方案。
+1 FYI掃描需要一個'text'參數,不需要調用'textConnection'。 –
謝謝。現在已經納入了。 –
使用可以使用gregexpr
和regmatches
:
vec <- "17+18+19+5+21"
a <- c(17, 18, 21)
pattern <- paste0("\\b(", paste(a, collapse = "|"), ")\\b")
# [1] "\\b(17|18|21)\\b"
regmatches(vec, gregexpr(pattern, vec))[[1]]
# [1] "17" "18" "21"
注意這個確切的數字,即匹配,17
不匹配177
。
什麼語言/正則表達式引擎? – Paulpro
所以你試圖忽略第三和第四個元素的每一個倍數或每個19或5的倍數? – tenub
忽略除數組之外的每一個數字...... – user1755645