這是我的資料,一個字串:
我的資料是一個字串。
data <- "Mr. NAME. Content1.Mrs. NAMEE. Content2.Ms.NAME ABCD。內容3."
我通過下面的語法得到一個名字的向量:
我通過下面的語法得到一個名字的向量。
name < - unlist(str_extract_all( text, "Mr。 s[:upper:]{1,20}s?[:upper:]{1,20}.|Ms.s[:upper:]{1,20}s?[:upper:]{1,20}.|Mrs.s[:upper:]{1,20}s? [:upper:]{1,20}。" ))
我得到了我想要的東西:
名字
[1] "BOOKER先生"。 "科默先生"。 "BAIRD先生。" "KIRKPATRICK女士。"
[5] "CORTEZ MASTO女士。" "羅森女士"。 "HAYES女士。" "SHALALA女士。"
[9] "DEUTCH先生"。 "KENNEDY先生"。 "KRISHNAMOORTHI先生。 "索托先生。"
[13] "索托先生。" "德明斯夫人"。 "索托先生" "CICILLINE先生。"
[17] "索托先生。" "瓦瑟曼-舒爾茨女士。" "索托先生。" "WASSERMAN SCHULTZ女士。"
我怎樣才能得到這些名字之間的內容的矢量。我想要一個像這樣的向量:
"Content1." "Content2." "Content3."
我試著用str_subset和strsplit來獲取我在str_extract函式中定義的模式之間的內容,一次次失敗......
uj5u.com熱心網友回復:
你確實可以用stringr::str_split使用你的regex。然而,將替代方案濃縮為
pattern <- "M(?:rs?|s).sp{Lu}{1,20}s?p{Lu}{1,20}。"
Ms, Mr和Mrs可以連接成M(?:rs?|s)模式(M,然后是r和一個可選的s或者只是s)。
現在,你可以在stringr::str_split中使用這個模式:
pattern <- "M(?:rs?|s).sp{Lu}{1,20}s?p{Lu}{1,20}。"
library(stringr)
str_split(data,/span>pattern)
# => [[1]]/span>
# [1] "" " Content1." " 內容2。" " 內容3。"
為什么在開頭有一個空字串?它的存在是因為你在字串的開頭有一個匹配。在分割時,匹配的文本被從char序列中洗掉,前后的文本被放入單獨的專案中。當匹配在開始時,第一個專案是空字串。當匹配在字串的末尾,或者有連續的匹配時,也會發生同樣的情況。
如果你不希望在輸出中出現空項,只需將它們洗掉即可:
pattern <- "M(?:rs?|s).sp{Lu}{1,20}s?p{Lu}{1,20}。" /span>
library(stringr)
結果<- str_split(data,pattern)
lapply(result, function(x) x[/span>x! =""])
# => [[1]]
# [1] " 內容1。" " 內容2." " 內容3。"
uj5u.com熱心網友回復:
獲得你想要的結果的一個簡單方法是使用string_replace_all將你的regex折疊成一個token,然后通過這個token進行分割:
#Dropping many alternative patterns,
模式 = "Mr.s[:upper:]{1,20}s? [:upper:]{1,20}" #etc
name <- unlist(/span>stringr:: str_replace_all( data, pattern。 "xyx"))
stringr::str_split(name, "xyx"/span>)
產量
"" " Content1." " Content2." " Content3."
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/323771.html
標籤:
上一篇:替換除大括號內的單詞
下一篇:負數后置量詞不固定
