正则表达式:删除除第一个字符和最后一个数字以外的所

时间:2016-07-25 20:05:45

标签: regex r

我知道^.是第一个字符,(\d+)(?!.*\d)是最后一个字符。我尝试在这些之间使用|并尝试为第二个字符找到代码,但没有成功。

这是R

以例如:

当我

时,

'ABCD some random words and spaces 1234'应输出'A4'

sub([regex here], "", 'ABCD some random words and spaces 1234')

1 个答案:

答案 0 :(得分:3)

如果您使用^.|(\d+)(?!.*\d),则该模式仅匹配第一个字符并将其与sub一起删除,如果与gsub一起使用,则会删除第一个字符和最后1位数字在替换模式中没有反向引用。请参阅this pattern demo

您可以使用

sub("^(.).*(\\d).*$", "\\1\\2", "ABCD some random words and spaces 1234") 

请参阅R demoregex demo

此TRE正则表达式匹配:

  • ^ - 字符串开头
  • (.) - 第1组捕获任何字符
  • .* - 0+尽可能多的字符直到最后......
  • (\\d) - 第2组捕获数字
  • .* - 字符串的其余部分
  • $ - 字符串结束。

\\1\\2替换模式将第1组和第2组捕获的值重新插入结果。