I want to replace the last number in a string using regex
and gsub
我想用regex和gsub替换字符串中的最后一个数字
S <- "abcd2efghi2.txt"
The last number and the position of the last number can vary.
最后一个号码和最后一个号码的位置可以变化。
So I've tried the regex
所以我试过了正则表达式
?<=[\d+])\b
gsub("?<=[\d+])\b", "", S)
but that doesn't seem to work
但这似乎不起作用
Appreciate any help.
感谢任何帮助。
2 个解决方案
#1
2
You can achieve that with a default TRE engine using the following regex:
您可以使用以下正则表达式使用默认TRE引擎实现此目的:
\d+(\D*)$
Replace with the \1
backreference.
替换为\ 1反向引用。
Details
-
\d+
- 1 or more digits -
(\D*)
- Capturing group 1: any 0+ non-digit symbols -
$
- end of string -
\1
- a backreference to the Group 1 value (so as to restore the text matched and consumed with the(\D*)
subpattern).
\ d + - 1位或更多位数
(\ D *) - 捕获组1:任何0+非数字符号
$ - 结束字符串
\ 1 - 对组1值的反向引用(以便恢复与(\ D *)子模式匹配和使用的文本)。
See the regex demo.
请参阅正则表达式演示。
R代码演示:
sub("\\d+(\\D*)$", "\\1", S)
## => [1] "abcd2efghi.txt"
#2
0
You could use this regex:
你可以使用这个正则表达式:
It matches a sequence of digits when everything that follows consists of non-digits (\D
) until the end of the string ($
).
当后面的所有内容由非数字(\ D)组成,直到字符串结尾($)时,它匹配一个数字序列。
#1
2
You can achieve that with a default TRE engine using the following regex:
您可以使用以下正则表达式使用默认TRE引擎实现此目的:
\d+(\D*)$
Replace with the \1
backreference.
替换为\ 1反向引用。
Details
-
\d+
- 1 or more digits -
(\D*)
- Capturing group 1: any 0+ non-digit symbols -
$
- end of string -
\1
- a backreference to the Group 1 value (so as to restore the text matched and consumed with the(\D*)
subpattern).
\ d + - 1位或更多位数
(\ D *) - 捕获组1:任何0+非数字符号
$ - 结束字符串
\ 1 - 对组1值的反向引用(以便恢复与(\ D *)子模式匹配和使用的文本)。
See the regex demo.
请参阅正则表达式演示。
R代码演示:
sub("\\d+(\\D*)$", "\\1", S)
## => [1] "abcd2efghi.txt"
#2
0
You could use this regex:
你可以使用这个正则表达式:
It matches a sequence of digits when everything that follows consists of non-digits (\D
) until the end of the string ($
).
当后面的所有内容由非数字(\ D)组成,直到字符串结尾($)时,它匹配一个数字序列。