2016-09-21 127 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 
相关问题