正则表达式grepl用于特定和重复的模式

用户名

为了匹配格式为“ lkas32kj_123_3.21”的字符串,我使用(在R中)

grepl("^[[:alnum:]]+_[[:digit:]]+_[[:digit:]]+\\.{0,1}[[:digit:]]+$", "lkas32kj_123_3.21")

如何将其扩展到具有任意长度的|重复/复合字符串的情况,例如(长度三)“ lkas32kj_123_3.21 | l3kj_12_0.21 | 123e_4_32.1”。

有没有办法制作嵌套(递归?)模式?

维克多·史翠比维

您可以使用

"^[[:alnum:]]+(?:_\\d+){2}(?:\\.\\d+)?(?:\\|[[:alnum:]]+(?:_\\d+){2}(?:\\.\\d+)?)*$"

正则表达式演示

在R中使用

x <- c("lkas32kj_123_3.21", "lkas32kj_123_3.21|l3kj_12_0.21|123e_4_32.1", "+++NO+++")
rx <- "[[:alnum:]]+(?:_\\d+){2}(?:\\.\\d+)?"
grepl(paste0("^", rx, "(?:\\|", rx ,")*$"), x)

在线查看R演示

模式如下:^{single_item_regex}(?:\|{single_item_regex})*$它匹配:

  • ^ -字符串开始
  • {single_item_regex}-模式你有单项(注意我换成[[:digit:]]\d把它缩短,但如果你需要坚持到POSIX字符类,你可以)
  • (?: -非捕获组的开始:
    • \| - 管道
    • {single_item_regex} -单项模式
  • )* -组结束,重复0次或更多次
  • $ -字符串结尾。

在单项模式中,建议替换为\.{0,1}\d+(?:\.\d+)?因为此处的目的是.在末尾匹配一个可选的数字和1+个数字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章