gpt4 book ai didi

字符串中条件模式的正则表达式

转载 作者:行者123 更新时间:2023-12-01 11:47:20 25 4
gpt4 key购买 nike

我需要从一些字符串中提取子字符串,例如:
我的数据是一个向量: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的正则表达式,所以我尝试使用 regexprregmatches , 两个函数来提取我想要的子字符串。

代码是:

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”软件来寻找原因。

最佳答案

我认为它不起作用的原因是因为 (1) checks if a numbered capture group has been set但是还没有第一个捕获组集,也没有在正面回顾中 (?<=PREDICTED:)? .

在接下来的部分中有第一个和第二个捕获组。 if 子句将检查组 1,它未设置,因此它将匹配组 2。

如果你想让它成为唯一的捕获组 (?<=(PREDICTED: )?)并省略其他 2,则 if 子句将为真,但您将收到错误,因为后视断言不是 fixed length .

代替使用条件模式,要获取这两个词,您可以使用捕获组并生成 PREDICTED:可选的:

^(?:PREDICTED: )?(\w+)

Regex demo | R demo

关于字符串中条件模式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56406458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com