首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用grep标识n以上的所有数字

使用grep标识n以上的所有数字
EN

Stack Overflow用户
提问于 2017-12-01 07:43:16
回答 1查看 65关注 0票数 0

我有一个包含X.1 - X.13的字符向量(实际上,还有很多其他东西,包括其他编号变量和带有X的变量)。我想定位X.3 - X.13,并为此使用了带有以下表达式的grep

代码语言:javascript
复制
x <- paste0("X.", 1:13)
grep("^X\\.[3-9]{1}|^X\\.[0-9]{2}", x)

我的问题是:有没有更好、更短的表达式可以用在这里?我知道这可能是相当琐碎的,但我只是想更好地理解正则表达式。

EN

回答 1

Stack Overflow用户

发布于 2017-12-01 15:46:34

您的模式包含两个备选方案,^X\\.[3-9]{1}X.3X.9匹配,^X\\.[0-9]{2}X.00X.99匹配。这不是你要找的。

要仅定位X.13X.3,请使用

代码语言:javascript
复制
grep("^X\\.(?:[3-9]|1[0-3])\\b", x)

或者,在任何右侧上下文中进行匹配(右侧没有单词边界):

代码语言:javascript
复制
grep("^X\\.(?:1[0-3]|[3-9])", x)

参见the regex demo

或者,如果数字后面可以有字母或_,请将\\b替换为(?!\\d),并确保将perl=TRUE传递给grep函数,因为默认的TRE正则表达式引擎不支持lookahead构造:

代码语言:javascript
复制
grep("^X\\.(?:[3-9]|1[0-3])(?!\\d)", x, perl=TRUE)

参见this regex demo

另一点:^插入符号用于表示字符串的开始。如果您想要匹配字符串中的任何位置的子字符串,请将其删除或替换为\\b,以匹配前面没有_、字母或数字的X (请参见another regex demo)。

详细信息

  • ^ -字符串的开始
  • X\\. -a substring
  • (?: -组的开始:
    • 1[0-3] - 1后跟从0到9

的数字- X. -1-3到9

  • ) - end of the non-capturing group
  • \\b -a word group
  • \\b

(非捕获边界的结束-一个单词边界)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47584472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档