根据部分模式来设置值

时间:2019-01-28 09:38:02

标签: r regex

我正在尝试使用正则表达式(url:happy_to-learn.com)进行子集化。

由于我是正则表达式的新手,有人可以帮助我解决为什么它不起作用的代码吗?

x <- c("happy_to-learn.com", "His_is-omitted.net")
str_subset(x, "^[a-zA-Z](\\_|\\-)*\\.com$")

我了解^[a-zA-Z](\\_|\\-)*的这一部分指的是,“当您击中从a到z或A到Z的一系列字母时开始,它包含_或-,如果是,则将其子集化具有0个或更多匹配项的部分。

但是,是否可以通过添加我希望子集的值的后半部分来继续执行此代码?即\\.com$是指所有以.com结尾的值。

正则表达式中是否有类似"^[a-zA-Z](\\_|\\-)*...\\.com$"的内容?

2 个答案:

答案 0 :(得分:2)

我们需要用+指定一个或多个,因为_-不仅在第一个字母之后。

str_subset(x, "^[a-zA-Z]+(\\_|\\-).*\\.com$")
#[1] "happy_to-learn.com"

此外,.*指的是零个或多个字符,因为.可以是任何字符,直到.和'com'末尾($)为止。字符串

答案 1 :(得分:1)

为什么使用外部包装? grep也可以做到。

grep("^[[:alpha:]_-]+.*\\.com$", x, value = TRUE)
#[1] "happy_to-learn.com"

说明。

  1. "^"标记字符串的开头。
  2. "[:alpha:]以可移植的方式匹配任何字母字符(大写或小写)。
  3. "^[[:alpha:]_-]+"之间的
  4. []中,存在替代字符以匹配重复一次或多次。字母或下划线_或减号-
  5. "^[[:alpha:]_-]+.*"上面的任意字符后面重复零次或多次。
  6. "^[[:alpha:]_-]+.*\\.com$"以字符串".com"结尾,其中的点不是元字符,因此必须转义。