删除字母和点组合的正则表达式

Regular Expression to remove a letter and dot combination

我正在尝试使用 R 中的正则表达式从数字前面删除文本 - 'X' 或 'X.'。我是正则表达式的新手,很难让它发挥作用。我已经尝试了 X 和 .有或没有我能想到的转义字符,包括:

如有任何帮助,我们将不胜感激。

您的意思是从任何数字中删除 '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(\.)?", "")

如果您不想在最开始专门匹配 XX.,请从上面的示例中删除 ^ 以匹配单词中的任何位置。

remove text - either an 'X' or an 'X.' - from the front of a number

考虑到您所有的测试用例都在字符串的开头包含一个 XX.,您可以使用

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=期间不会被删除] 操作。