为了匹配格式为“ 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)
模式如下:^{single_item_regex}(?:\|{single_item_regex})*$
。它匹配:
^
-字符串开始{single_item_regex}
-模式你有单项(注意我换成[[:digit:]]
用\d
把它缩短,但如果你需要坚持到POSIX字符类,你可以)(?:
-非捕获组的开始:
\|
- 管道{single_item_regex}
-单项模式)*
-组结束,重复0次或更多次$
-字符串结尾。在单项模式中,建议替换为\.{0,1}\d+
,(?:\.\d+)?
因为此处的目的是.
在末尾匹配一个可选的数字和1+个数字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句