Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式,用于替换单独出现或带有空格但不是带小数点r的数字时的句点(.)_Regex_R - Fatal编程技术网

Regex 正则表达式,用于替换单独出现或带有空格但不是带小数点r的数字时的句点(.)

Regex 正则表达式,用于替换单独出现或带有空格但不是带小数点r的数字时的句点(.),regex,r,Regex,R,给定输入向量(iv) 但是,我不知道如何形成regexp来获得我需要的东西。提前感谢。常用表达方式: "^ *\. *$" 如果要用NA替换值,则需要使用某种形式的赋值运算符 一个简单的方法: iv[gsub(" ", "", iv)=="."] <- NA 编辑将“NA”替换为NA gsub('^\\s*[.]\\s*$', NA,c(.10,.15,"hello","."," . ",". ")) [1] "0.1" "0.15" "hello" NA

给定输入向量(iv)


但是,我不知道如何形成regexp来获得我需要的东西。提前感谢。

常用表达方式:

       "^ *\. *$"

如果要用
NA
替换值,则需要使用某种形式的赋值运算符

一个简单的方法:

 iv[gsub(" ", "", iv)=="."] <- NA
编辑将“
NA
”替换为
NA

 gsub('^\\s*[.]\\s*$', NA,c(.10,.15,"hello","."," . ",". "))
[1] "0.1"   "0.15"  "hello" NA      NA      NA     
使用
stringr

library(stringr)
x <- c(.10,.15,"hello","."," . ",". ")
x[str_trim(x) == '.'] <- NA
x
[1] "0.1"   "0.15"  "hello" NA      NA      NA     
库(stringr)

x您要查找的是正则表达式中的
负前瞻
。您要检查
后面是否没有
数字(0-9)
,并将其替换为
NA
。如果这个逻辑是您想要的,那么它可以在一行中实现,如下所示:

gsub("\\.(?![0-9])", NA, iv, perl=T)
# [1] "0.1"   "0.15"  "hello" NA      NA      NA     

逻辑:搜索不后跟数字的点,并将其替换为
NA

谢谢!我花了20分钟试图让它在子表达式中工作。sub(“regex”,NA,iv)…sub(“(regex)”,NA,iv)…sub(“[regex]”,NA,iv)…sub([regex]),NA,iv…我想只要有regex,就可以很明显地使用它。帮助?@agstudy,我想这是被否决的,因为它在
R
;)@RicardoSaporta这在R
gsub(“^*\.***”,'NA',c(.10,.15,“hello$,”,“,”,“,”,“,”,“,”,“,”)中对我有效
。这是一个很好的答案。想法就在这里。@agstudy,尝试以下方法:
any(is.na(gsub('^*\.*$,'na',c(.10.15,“hello”,“,”,”,“,”,”)
如果在
gsub
中使用na作为替换,则会得到字符“N”“a”。ie:
is.na(“na”)==FALSE。您必须将正则表达式传递到
[`这对我来说效果非常好,非常感谢!此外,我现在知道如何在grep和相关函数中使用regex。而且……了解更多关于reg表达式的信息有助于降低我的恐惧感,这些表达式似乎非常强大和有用,但直到现在都避免使用。如果我们传递NA而不是“NA”,那么当使用适当的TRUE时,它似乎可以正常工作ted with is.na(out)谢谢Ricardo。这对我的学习非常有帮助。在我的特殊情况下,数据有点乱,所以我不能指望空格是可移动的,例如,“hello dolly”我们希望保留空格。@user1895891别担心,这些空格不会被永久删除。请参阅edit。这就是为什么这是一个如此简洁的解决方案-这是一个逻辑测试,如果你删除了空格,值会是多少。如果匹配的话”然后给出了Nath解的结果,对我来说是NA向量…不确定我做错了什么。在建议的编辑中讨论#2@user1894891,我想你在寻找的是
消极前瞻
。如果是,请查看我的帖子。
 out <- iv
 out[gsub(" ", "", iv)=="."] <- NA
  gsub('^\\s*[.]\\s*$', 'NA',c(.10,.15,"hello","."," . ",". "))
  [1] "0.1"   "0.15"  "hello" "NA"    "NA"    "NA"   
 gsub('^\\s*[.]\\s*$', NA,c(.10,.15,"hello","."," . ",". "))
[1] "0.1"   "0.15"  "hello" NA      NA      NA     
library(stringr)
x <- c(.10,.15,"hello","."," . ",". ")
x[str_trim(x) == '.'] <- NA
x
[1] "0.1"   "0.15"  "hello" NA      NA      NA     
gsub("\\.(?![0-9])", NA, iv, perl=T)
# [1] "0.1"   "0.15"  "hello" NA      NA      NA