可选地使用lookbehind断言匹配符号

时间:2018-05-28 22:22:41

标签: r regex

假设我有一些像这样的字符串:

strings <- c("Robert: my name is Robert", "Michael my name is Michael", "Jack: I like turtles")

我想创建一个正则表达式查询,它完全返回

[1] "Robert" "Michael"

即。名称后跟“我的名字”,并删除名称后面的任何可能的冒号。我的尝试是:

regmatches(strings, regexpr(".*(?=:* my name)", strings, perl = T))

在这里,我尝试通过编写

来选择匹配冒号
(?=:* my name)

然而,在这种情况下,结肠标志似乎没有被lookbehind断言捕获(或者是吗?),而是我得到了

[1] "Robert:" "Michael"

是否有某种方法可以更改lookbehind断言中的表达式(或者在其外部)以从结果中删除冒号? 完整代码:

strings <- c("Robert: my name is Robert", "Michael my name is Michael",
             "Jack: I like turtles")
regmatches(strings, regexpr(".*(?=:* my name)", strings, perl = T))

1 个答案:

答案 0 :(得分:2)

我已经让你成为一个省略冒号的正则表达式:

.*[^:](?=:* my name)

可在此处找到演示:

http://rubular.com/r/RrQAhhIs1j