【发布时间】:2022-01-04 10:03:47
【问题描述】:
假设我有一个字符串
"Happy 2022 New 01 years!"
我希望返回“01”。 更具体地说,我需要字符串中的最后一组数字。这个数字可能只是“1”、“10”或“999”…… 否则字符串几乎可以是任何东西。 我用 gsub 尝试了各种正则表达式,但似乎无法做到恰到好处。有一点我误会了。
例如,如果我这样做:
gsub('.*(\\d+).*$', '\\1', x)
那为什么我会返回“1”?正则表达式中的“+”是否未指定一位或多位数字?
我的解释怎么错了?: '.' 表示任何字符,'(\\d+)' 表示一位或多位数字,'.' 表示更多字符,'$' 在字符串的末尾。 gsub 是贪心的,所以它会返回最后一组数字(因此是 '01',而不是 '2022')。 '\\1' 将用第一个也是唯一的匹配替换整个字符串。 x 是字符串。
【问题讨论】:
-
stringi::stri_extract_last_regex(x, '\\d+')
标签: r regex regex-greedy