我正在寻找一个字符串匹配查找器来测试输出中的以下字符串是否可以从列表中提取 stringsToTest
.
我有一个正则表达式字符串,但无法获得正确的组合。这有很多可能性。
我的实际列表大约有 140,000 个字符串,我只想找到这个组合:
stringsToTest = list("abc/a3d)-1-B-3-B","dec/d93)-B-1-3",
"vdiek/asdf899)-1-B-B-B-1-3-4","avd/asd/vde)-1-B-3-4",
"ab33/dfv)-B-12-B","abc/ade)-1")
我使用 grepl b/c 它给我以下字符串的真或假grepl(stringsToTest, #pattern=#pattern="([:alnum:]+\\/){2}\\){1}a\\-]{1}([:alnum:]*a\\-]){3}.*$")){
pattern="[:alnum:]+[:punct:]+[:alnum:]+[:punct:]+[:alnum:]+[:punct:]+[:alnum:]+[:punct:]+[:alnum:]+[:punct:]+[:alnum:].*$")
#[1] FALSE FALSE FALSE FALSE FALSE FALSE
我想要的输出是。前斜线、复数和连字符必须完全相同。我的截断符是一个正斜杠,然后是一个副词,然后是三个连字符。如果有的话,我会排除更多的连字符示例中所示。
预期输出:
[1] TRUE TRUE TRUE FALSE TRUE FALSE
最佳答案
您可以使用
^[[:alnum:]]+/[[:alnum:]]+\)(?:-[[:alnum:]]+){3}
见 regex demo .细节:^
- 字符串开头 [[:alnum:]]+
- 一个或多个字母或数字 /
- /
字符 [[:alnum:]]+
- 一个或多个字母/数字 \)
- )
字符 (?:-[[:alnum:]]+){3}
- 三个 -
然后是一个或多个字母/数字序列。 见 R demo :
stringsToTest = list("abc/a3d)-1-B-3-B","dec/d93)-B-1-3",
"vdiek/asdf899)-1-B-B-B-1-3-4","avd/asd/vde)-1-B-3-4",
"ab33/dfv)-B-12-B","abc/ade)-1")
grepl(stringsToTest,
pattern="^[[:alnum:]]+/[[:alnum:]]+\\)(?:-[[:alnum:]]+){3}")
## => [1] TRUE TRUE TRUE FALSE TRUE FALSE
关于正则表达式字符串以匹配 R 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66081404/