2016-09-21 131 views
-1

我想使用正則表達式匹配以下模式(在R中,版本3.3.1):字,任何不超過10個字符的字 - 字。正則表達式中n個字符之間的字符

我試過了下面的代碼:"word1".{0,10}"word2"$,和其他一些類似的組合,但沒有成功。

下面是一些例子輸出:

x <- c('word1 word2',   # TRUE 
     'word1 bla word2',  # TRUE 
     'word1 blablabla word2') # FALSE 


編輯: 我嘗試了所有的建議,但他們不工作。我嘗試從DATA API查詢一些數據。在查詢部分,我必須寫什麼我想要獲得。例如,這可以工作:query = list(q = paste0(「\」「,」SomeSurname「,」。「,」SomeName「,」。「,」\「」,「〜5」,sep =「」 ))),但如果我想添加約束的方式,名稱和姓之間最多可以有10個任意字符,它不起作用:query = list(q = paste0(「\」「,prebivaliste [i,」 prezime「],」。{0,5}「,prebivaliste [i,」ime「],」\「」,「〜5」,sep =「」)))

+0

你的[**正則表達式工程**](https://regex101.com/r/uR7jE8/1) - 沒有引號和錨點'$',也就是說。 – Jan

+1

我不知道R,但根據https://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html'word1。{0,10} word2'應該有效。 – slim

+0

@slim:問題將是'$'和雙引號。 – Jan

回答

1

我認爲這應該與您「再經過:

(word1)(?:.){0,10}(word2) 

(word1) - capture the literal text: "word1" 
(?:.) - Set up non capturing group for any character 
{0,10} - 0-10 times 
(word2) - capture the literal text "word2" 

grepl('(word1)(?:.){0,10}(word2)', x) 
# [1] TRUE TRUE FALSE 

由於suming你想捕捉任何字來代替字詞1 /字詞2,你可以使用\\w\\w+匹配

活生生的例子:https://regex101.com/r/xJ3yZ2/1

+0

我試過了'query = list(q = paste0(「\」「,」(「,noquote(word1),」)「,」(?:。){0,10}「,」(「,noquote(word2),」)「 「\」「,」〜5「,sep =」「)))'但沒有成功 – Mislav

+0

不需要捕獲組。 – Jota

+0

Mislav - 這是什麼語言,你可以把東西放在ideone上,我會錘擊它嗎? –

0

也許這就是這個簡單:

nchar(gsub('word1|word2','',string))<=10 
#[1] TRUE TRUE FALSE 
相關問題