我有一个"字母数字"形式的字符串向量,我想使用在stringr::str_extract
中实现的模式"\\d*"
的RegEx来提取数字.结果非常令人困惑:
# R 4.2.3
# install.packages('stringr')
library(stringr)
# case 1
str_extract('word 42', '\\d*')
# ""
# case 2 (?)
str_extract('42 word', '\\d*')
# "42"
# case 3
str_extract('word 42', '\\d+')
# "42"
# case 4 (?!)
str_extract('word 42', '\\d*$')
# "42"
# case 5
str_extract('42 word', '\\d*$')
# ""
在所有情况下,预期结果都是"42"
.
我是RegEx‘s的新手,但pattern = '\\d*'
似乎非常简单--我把它理解为"匹配任意数量的连续数字字符".
它不适用于第一种情况,但适用于第二种情况,这一事实本身就非常违反直觉.然后,当使用pattern = '\\d*$'
时,角色似乎颠倒了(情况4和5).
我已经try 了更多的其他函数(str_match
和str_match_all
),但结果仍然不清楚.
我在其他地方找不到这样具体的东西,所以我希望更有经验的R/RegEx用户能够澄清到底发生了什么.