我正在尝试使用正则表达式(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$"
的内容?
答案 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"
说明。
"^"
标记字符串的开头。"[:alpha:]
以可移植的方式匹配任何字母字符(大写或小写)。"^[[:alpha:]_-]+"
之间的[]
中,存在替代字符以匹配重复一次或多次。字母或下划线_
或减号-
。"^[[:alpha:]_-]+.*"
上面的任意字符后面重复零次或多次。"^[[:alpha:]_-]+.*\\.com$"
以字符串".com"
结尾,其中的点不是元字符,因此必须转义。