删除最后一个 space 之前的所有内容
Remove everything before the last space
我有以下字符串。我试图删除最后一个 space 之前的所有字符串,但似乎我无法实现。
我试着按照这个 post
str <- c("Veni vidi vici")
gsub("\s*","\1",str)
"Venividivici"
我想要的只是删除最后一个 space 之前的所有内容后剩下的 "vici"
个字符串。
您的 gsub("\s*","\1",str)
代码将每次出现的 0 个或多个空格替换为对捕获组 #1 值的引用(这是一个空字符串,因为您没有在模式中指定任何捕获组)。
您想匹配到最后一个空格:
sub(".*\s", "", str)
如果您不想在字符串尾随空格的情况下得到空白结果,trim 字符串在前:
sub(".*\s", "", trimws(str))
或者,使用方便的 stri_extract_last_regex
from stringi
package 和简单的 \S+
模式(匹配 1 个或多个非空白字符):
library(stringi)
stri_extract_last_regex(str, "\S+")
# => [1] "vici"
请注意,.*
尽可能多地匹配任何 0+ 个字符(因为 *
是贪婪量词,而 TRE 模式中的 .
匹配任何字符,包括换行字符) , 首先抓住整个字符串。然后,回溯开始,因为正则表达式引擎需要将空格与 \s
匹配。从字符串的末尾开始逐个字符地产生,正则表达式引擎偶然发现最后一个空格,并将其称为一天返回之后删除的匹配项。
在线查看R demo and a regex demo:
str <- c("Veni vidi vici")
gsub(".*\s", "", str)
## => [1] "vici"
此外,您可能想了解回溯在 regex debugger:
中的工作原理
那些红色箭头表示回溯步骤。
我有以下字符串。我试图删除最后一个 space 之前的所有字符串,但似乎我无法实现。
我试着按照这个 post
str <- c("Veni vidi vici")
gsub("\s*","\1",str)
"Venividivici"
我想要的只是删除最后一个 space 之前的所有内容后剩下的 "vici"
个字符串。
您的 gsub("\s*","\1",str)
代码将每次出现的 0 个或多个空格替换为对捕获组 #1 值的引用(这是一个空字符串,因为您没有在模式中指定任何捕获组)。
您想匹配到最后一个空格:
sub(".*\s", "", str)
如果您不想在字符串尾随空格的情况下得到空白结果,trim 字符串在前:
sub(".*\s", "", trimws(str))
或者,使用方便的 stri_extract_last_regex
from stringi
package 和简单的 \S+
模式(匹配 1 个或多个非空白字符):
library(stringi)
stri_extract_last_regex(str, "\S+")
# => [1] "vici"
请注意,.*
尽可能多地匹配任何 0+ 个字符(因为 *
是贪婪量词,而 TRE 模式中的 .
匹配任何字符,包括换行字符) , 首先抓住整个字符串。然后,回溯开始,因为正则表达式引擎需要将空格与 \s
匹配。从字符串的末尾开始逐个字符地产生,正则表达式引擎偶然发现最后一个空格,并将其称为一天返回之后删除的匹配项。
在线查看R demo and a regex demo:
str <- c("Veni vidi vici")
gsub(".*\s", "", str)
## => [1] "vici"
此外,您可能想了解回溯在 regex debugger:
中的工作原理那些红色箭头表示回溯步骤。