【发布时间】:2019-10-17 18:35:44
【问题描述】:
我需要从一些字符串中提取子字符串,例如:
我的数据是一个向量:c("Shigella dysenteriae","PREDICTED: Ceratitis")
a = "Shigella dysenteriae"
b = "PREDICTED: Ceratitis"
我希望如果字符串以“PREDICTED:”开头,可以提取到后面的单词(可能是“Ceratitis”),如果字符串不以“PREDICTED”开头,可以提取到后面的词第一个词(也许是志贺氏菌);
在本例中,结果为:
result_of_a = "Shigella"
result_of_b = "Ceratitis"
嗯,这是一个典型的条件正则表达式。我试过了,但总是失败;
我使用了R,它可以兼容perl的正则表达式。
我知道 R 支持 perl 的正则表达式,所以我尝试使用 regexpr 和 regmatches 这两个函数来提取我想要的子字符串。
代码是:
pattern = "(?<=PREDICTED:)?(?(1)(\\s+\\w+\\b)|(\\w+\\b))"
a = c("Shigella dysenteriae")
m_a = regexpr(pattern,a,perl = TRUE)
result_a = regmatches(a,m_a)
b = c("PREDICTED: Ceratitis")
m_b = regexpr(pattern,a,perl = TRUE)
result_b = regmatches(b,m_b)
最后,结果是:
# result_a = "Shigella"
# result_b = "PREDICTED"
不是我期望的结果,result_a是对的,result_b是错的。
WHY???看来条件不行……
PS: 我试图阅读条件正则表达式的一些细节。这是我尝试阅读的网页:https://www.regular-expressions.info/conditional.html 并尝试从该网页模仿“模式”,并尝试使用“RegexBuddy”软件查找原因。
【问题讨论】:
-
它们是在某种列表、数据框中还是只是独立存储?
-
向量,就像c("痢疾志贺氏菌","PREDICTED: Ceratitis")
标签: r regex pcre regex-lookarounds