我正在尝试构建一个正则表达式来提取某个字符串后的 6 位数字(正数或负数),即“LogL=”。
它来自某些软件的文本输出。
7 LogL=-3695.47 S2= 9.0808 1891 df 2.263 0.2565
9 LogL= 2456.30 S2= 1.2789 1785 df 1.244 0.1354
我在 R 中尝试了以下内容:
txt <- " 9 LogL= 2456.30 S2= 1.2789 1785 df 1.244 0.1354 "
as.numeric(unlist(strsplit(sub(".*LogL=*", "", txt), " "))[1])
不适用于正数。我想象它的处理方式非常粗鲁/丑陋。
我试图干预 regex101.com
尝试过与 Stackoverflow 相关的问题:(1) (2) (3)
我有点迷茫,似乎无法理解正则表达式。我相信这是小菜一碟。帮助?
最佳答案
我会使用 look-behind regex :
txt <- " 7 LogL=-3695.47 S2= 9.0808 1891 df 2.263 0.2565
9 LogL= 2456.30 S2= 1.2789 1785 df 1.244 0.1354 "
pattern <- "(?<=LogL\\=)\\s*\\-*[0-9.]+"
m <- gregexpr(pattern, txt, perl = TRUE)
as.numeric(unlist(regmatches(txt, m)))
#1] -3695.47 2456.30
关于regex - 提取某个单词后的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38120674/