删除字母和点组合的正则表达式
Regular Expression to remove a letter and dot combination
我正在尝试使用 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"
如有任何帮助,我们将不胜感激。
您的意思是从任何数字中删除 'X' 或 'X.'?
实际上正则表达式中的单个 .
应该是这样的 \.
,所以尝试 str_replace("X.4.89294e-05", "X\.?", "")
代替。
.
必须转义。在 R 中,您可以通过在 .
运算符之前添加 \
来实现。
在此处阅读 \
的需求:Escape with a double backslash
像这样:
txt = c("X.4.89294e-0", "X4.89294e-0")
str_replace(txt, "^X(\.)?", "")
如果您不想在最开始专门匹配 X
或 X.
,请从上面的示例中删除 ^
以匹配单词中的任何位置。
remove text - either an 'X' or an 'X.' - from the front of a number
考虑到您所有的测试用例都在字符串的开头包含一个 X
或 X.
,您可以使用
sub("^X\.?(\d)", "\1", x)
str_replace(x, "^X\.?(\d)", "\1")
请注意,在正则表达式测试站点,您需要使用单个反斜杠(文字 反斜杠),即 "coded" 和 R 字符串文字中的双反斜杠.
详情
^
- 字符串的开头
X
- 一个 X
字符
\.?
- \.
匹配文字点,?
是一个量词,使正则表达式引擎匹配 1 或 0 个连续出现的 .
char
(\d)
- 一个捕获组 #1,匹配任何数字并将其存储在内存槽中(\d
匹配任何数字)
\1
- 在替换参数中,对存储在组 1 内存槽中的值的引用。
您甚至可以使用 (?=\d)
基于前瞻的解决方案来检查紧邻当前位置右侧的数字:
sub("^X\.?(?=\d)", "", x, perl=TRUE)
str_replace(x, "^X\.?(?=\d)", "")
那么,就不需要使用</code>了,因为先行匹配的文本不会被放入匹配中,因此在<code>sub
/[=27=期间不会被删除] 操作。
我正在尝试使用 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"
如有任何帮助,我们将不胜感激。
您的意思是从任何数字中删除 'X' 或 'X.'?
实际上正则表达式中的单个 .
应该是这样的 \.
,所以尝试 str_replace("X.4.89294e-05", "X\.?", "")
代替。
.
必须转义。在 R 中,您可以通过在 .
运算符之前添加 \
来实现。
在此处阅读 \
的需求:Escape with a double backslash
像这样:
txt = c("X.4.89294e-0", "X4.89294e-0")
str_replace(txt, "^X(\.)?", "")
如果您不想在最开始专门匹配 X
或 X.
,请从上面的示例中删除 ^
以匹配单词中的任何位置。
remove text - either an 'X' or an 'X.' - from the front of a number
考虑到您所有的测试用例都在字符串的开头包含一个 X
或 X.
,您可以使用
sub("^X\.?(\d)", "\1", x)
str_replace(x, "^X\.?(\d)", "\1")
请注意,在正则表达式测试站点,您需要使用单个反斜杠(文字 反斜杠),即 "coded" 和 R 字符串文字中的双反斜杠.
详情
^
- 字符串的开头X
- 一个X
字符\.?
-\.
匹配文字点,?
是一个量词,使正则表达式引擎匹配 1 或 0 个连续出现的.
char(\d)
- 一个捕获组 #1,匹配任何数字并将其存储在内存槽中(\d
匹配任何数字)\1
- 在替换参数中,对存储在组 1 内存槽中的值的引用。
您甚至可以使用 (?=\d)
基于前瞻的解决方案来检查紧邻当前位置右侧的数字:
sub("^X\.?(?=\d)", "", x, perl=TRUE)
str_replace(x, "^X\.?(?=\d)", "")
那么,就不需要使用</code>了,因为先行匹配的文本不会被放入匹配中,因此在<code>sub
/[=27=期间不会被删除] 操作。