我试图在R中使用正则表达式来删除文本 - “X”或“X”。 - 从一个数字的前面。我是正则表达式的新手,并且很难让它工作。我尝试了X和的每个组合。有或没有我能想到的逃脱角色,包括:
str_replace("X.4.89294e-05", "X.",'')
结果"4.89294e-05"
但str_replace("X4.89294e-05", "X.",'')
结果".89294e-05"
str_replace("X.4.89294e-05", "[X.]",'')
结果".4.89294e-05"
str_replace("X.4.89294e-05", "[X/.?]",'')
结果".4.89294e-05"
str_replace("X.4.89294e-05", "[X//.?]",'')
结果".4.89294e-05"
str_replace('X.4.89294e-0','X/.{0,1}','')
结果"X.4.89294e-0"
str_replace('X.4.89294e-0','[X/.{0,1}]','')
结果".4.89294e-0"
非常感谢任何帮助。
答案 0 :(得分:9)
必须转义.
。在R中,您可以通过在\\
运算符之前添加.
来实现此目的。
在此处了解\\
的需求:Escape with a double backslash
像这样:
txt = c("X.4.89294e-0", "X4.89294e-0")
str_replace(txt, "^X(\\.)?", "")
如果您不想在一开始就专门匹配X
或X.
,请从上面的示例中移除^
,以便在该字词的任何位置与其匹配。
答案 1 :(得分:2)
你的意思是删除' X'或者' X。'从任何数字?
实际上,正则表达式中的单个.
应该与此\.
类似,因此请尝试使用str_replace("X.4.89294e-05", "X\.?", "")
。
答案 2 :(得分:2)
删除文字 - ' X'或者是' X。' - 从数字前面
考虑到所有测试用例在字符串的开头都包含一个X
或X.
,您可以使用
sub("^X\\.?(\\d)", "\\1", x)
str_replace(x, "^X\\.?(\\d)", "\\1")
请注意,在正则表达式测试网站上,您需要使用单个反斜杠(文字反斜杠),即#34;编码"使用R字符串文字中的双反斜杠。
<强>详情
^
- 字符串的开头X
- X
字符\\.?
- \.
匹配文字点,?
是一个量词,使正则表达式引擎匹配.
字符1>连续出现1或0次
(\\d)
- 一个捕获组#1,匹配并在内存插槽中存储任何数字(\d
匹配任何数字)\\1
- 在替换参数内,对存储在第1组内存插槽中的值的引用。您甚至可以使用(?=\d)
基于前瞻的解决方案来检查当前位置右侧的数字:
sub("^X\\.?(?=\\d)", "", x, perl=TRUE)
str_replace(x, "^X\\.?(?=\\d)", "")
然后,无需使用\1
,因为与前瞻匹配的文字未放入匹配中,因此在sub
/ {{1}期间无法删除操作。