我有这个挑战:
我希望能够以以下方式提取字符串的一部分:
1.字符串可能有点,也可能没有点,或者可能有很多点
1.我想提取第一个点之前的字符串部分,如果没有点,那么我想要整个字符串
1.我想用正则表达式来实现这一点
test<-c("This_This-This.Not This",
"This_This-This.not_.this",
"This_This-This",
"this",
"this.Not This")
字符串
因为我需要使用正则表达式,所以我一直在尝试使用这个表达式:
str_match(test,"(^[a-zA-Z].+)[\\.\\b]?")[,2]
型
但我得到的是
> str_match(test,"(^[a-zA-Z].+)[\\.\\b]?")[,2]
[1] "This_This-This.Not This" "This_This-This.not_this"
[3] "This_This-This" "this"
[5] "this.Not This"
>
型
我想要的输出是:
"This_This-This"
"This_This-This"
"This_This-This"
"this"
"this"
型
这是我对正则表达式的思考过程
str_match(test,"(^[a-zA-Z].+)[\\.\\b]?")[,2]
型
**(^[a-zA-Z].+)=**这是为了捕获点之前的组,因为字符串总是以字母cpas或小写字母开头,并且所有其他字符串都在其后,这就是为什么.+
[.\B]?=一个点或一个世界边界,可能是也可能不是,这就是为什么?
这不是给我想要的我错在哪里
3条答案
按热度按时间aiazj4mn1#
实际上,在这里,regex替换应该可以很好地工作,而不是提取:
字符串
替换在这里工作得很好,因为它对任何没有任何点的输入都没有操作,在这种情况下返回原始字符串。
83qze16e2#
我的正则表达式是“匹配任何东西,要么是一个点,要么是行尾”。
字符串
测试结果:
型
gwo2fgha3#
一个简单的提取是使用
str_extract
和一个负字符类匹配除.
之外的任何字符:字符串
数据类型:
型