Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在一个字符串中最多选择两个字母_R_Regex - Fatal编程技术网

R 在一个字符串中最多选择两个字母

R 在一个字符串中最多选择两个字母,r,regex,R,Regex,我有一个r字符向量,如下所示: vec1 = c('AB10', 'B10', 'BMC10', 'BRMC10', 'EC50', 'BMRS10', 'BMD10', 'TC60') 我只想grep()包含最多两个大写字母和一个10的元素。因此,我尝试了以下正则表达式: grep('^[A-Z]{,2}10$', vec1, value = T) [1] "AB10" "B10" "BMC10" "BMD10" 为什么该函数也选择“BMC10”和“BMD10”有三个字母?这似乎有效

我有一个r字符向量,如下所示:

vec1 = c('AB10', 'B10', 'BMC10', 'BRMC10', 'EC50', 'BMRS10', 'BMD10', 'TC60')
我只想
grep()
包含最多两个大写字母和一个10的元素。因此,我尝试了以下正则表达式:

grep('^[A-Z]{,2}10$', vec1, value = T)
[1] "AB10"  "B10"   "BMC10" "BMD10"
为什么该函数也选择“BMC10”和“BMD10”有三个字母?

这似乎有效:

grep('^[A-Z]{1,2}10$', vec1, value = T)

{}
量词不能在下面无界。如果将其设置为
{1,2}
{0,2}
(取决于所需内容),它将正常工作

我通常建议在调试regex。当我输入你的模式时,它注释如下:

{,2}10
逐字匹配字符
{,2}10
(区分大小写)

当我点击“量词”获取更多信息时(因为这也让我吃惊),我得到了以下示例:

a{3}
正好是
a

a{3,}
a3个或更多

a{3,6}
介于a的3和6之间

注意,
a{,3}
没有选项

将模式修改为
{0,2}
会生成此注释:

{0,2}
量词-匹配0到2次,尽可能多次,根据需要返回(贪婪)



还有正则表达式引擎问题。regex101.com不支持R的默认正则表达式引擎POSIX 1003.2扩展正则表达式。我想了解一下这方面的信息,它描述了可用的量词,并建议必须包含最小值。标记的dupe说明默认的R引擎忽略没有最小值的量词是一个错误。

true。但是我希望
{,2}
也有同样的行为。尽管我不得不承认,我还没有看过手册。然而,这表明it@andrasz还请注意,已更新为不包含
{,n}
{,2}10与字符{,2}10按字面意思匹配(区分大小写)
为什么存在任何匹配
{,2}
没有文字字符串那么突出……非常好。一定是发动机的东西。regex101默认为PCRE,如果我在
grep
中设置
perl=TRUE
,那么结果是一致的-与
{,2}
没有匹配。regex101没有R默认的POSIX 1003.2扩展正则表达式选项。请参阅dupe,看起来Wiktor已经解决了这个问题,它被认为是一个bug。@andrasz我已经向dupe线程添加了一个。@andrasz否,不要删除。副本是指向原始答案的有用指针,其中包含最详细的答案,使它们更容易找到。