我希望通過正則運算式回傳上一行中的特定組。
假設我有以下資訊,目標是根據以下行中的微分提取值90。
QTY 66:90:PCE
SCC 2
DTM 45:20200416:15
QTY 66:60:PCE
SCC 3
DTM 35:20210614:2
如果我要定位值90,我必須尋找SCC 2標簽,如果我要尋找值60,那就是SCC 3標簽。
我做了這么遠試圖回傳值 90(?<=^QTY\ 66:)(\d )(.*\n.*SCC\ 2.*)但它似乎令人費解而且我未能僅提取第 1 組。這是regex101的鏈接。我在實際應用中使用 R。謝謝您的幫助 !
uj5u.com熱心網友回復:
您可以使用
(?<=:)\d (?=[^\d\r\n]*[\r\n] .*SCC\ 2)
請參閱正則運算式演示。詳情:
(?<=:)-:必須立即出現在當前位置的左側\d- 一位或多位數字(?=[^\d\r\n]*[\r\n] .*SCC\ 2)- 在右邊,必須有[^\d\r\n]*- 除數字、CR 和 LF 之外的任何零個或多個字符[\r\n]- 一個或多個 CR 或 LF 字符.*SCC\ 2- 一行中出現最嚴重的SCC 2.
在 R 中,您可以使用
library(stringr)
str_extract(vec, "(?<=:)\\d (?=[^\\d\r\n]*[\r\n] .*SCC\\ 2)")
和幾個基本的 R 方法sub:
sub(".*?\\ \\d :(\\d )[^\r\n]*[\r\n] [^\r\n]*SCC\\ 2.*", "\\1", vec)
sub("(?s).*?\\ \\d :(\\d )(?-s).*\\R.*SCC\\ 2(?s).*", "\\1", vec, perl=TRUE)
請參閱正則運算式 1 演示和正則運算式 2 演示。
在線查看R 演示:
vec <- "QTY 66:90:PCE\nSCC 2\nDTM 45:20200416:15\nQTY 66:60:PCE\nSCC 3\nDTM 35:20210614:2"
sub(".*?\\ \\d :(\\d )[^\r\n]*[\r\n] [^\r\n]*SCC\\ 2.*", "\\1", vec)
sub("(?s).*?\\ \\d :(\\d )(?-s).*\\R.*SCC\\ 2(?s).*", "\\1", vec, perl=TRUE)
library(stringr)
str_extract(vec, "(?<=:)\\d (?=[^\\d\r\n]*[\r\n] .*SCC\\ 2)")
所有產量[1] "90"。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/389349.html
標籤:正则表达式
