我想John Doe從以下字串中提取名稱:
str <- 'Name: | |John Doe |'
我可以:
library(stringr)
str_extract(str,'(?<=Name: \\| \\|).*(?= \\|)')
[1] "John Doe"
但這涉及輸入大量空格,并且在空格數不固定時效果不佳。但是當我嘗試使用量詞 ( ) 時,我得到一個錯誤:
str_extract(str,'(?<=Name: \\| \\|).*(?= \\|)')
Error in stri_extract_first_regex(string, pattern, opts_regex = opts(pattern)) :
Look-Behind pattern matches must have a bounded maximum length. (U_REGEX_LOOK_BEHIND_LIMIT, context=`(?<=Name: \| \|).*(?= \|)`)
其他變體也是如此:
str_extract(str,'(?<=Name: \\|\\s \\|).*(?=\\s \\|)')
str_extract(str,'(?<=Name: \\|\\s{1,}\\|).*(?=\\s{1,}\\|)')
有針對這個的解決方法嗎?
uj5u.com熱心網友回復:
怎么樣:首先我們洗掉Name
然后我們用空格替換所有特殊字符,最后str_squish它
Library(stringr)
str_squish(str_replace_all( str_remove(str, "Name"), "[^[:alnum:]]", " "))
[1] "John Doe"
uj5u.com熱心網友回復:
使用基礎 R 的另一種解決方案:
sub("Name: \\|\\s \\|(.*\\S)\\s \\|", "\\1", str)
# [1] "John Doe"
uj5u.com熱心網友回復:
您也可以使用 將\K到目前為止匹配的內容排除在正則運算式匹配之外。
Name: \|\h \|\K.*?(?=\h \|)
解釋
Name: \|匹配Name: |\h \|匹配 1 個空格和|\K忘記到目前為止匹配的內容.*?匹配盡可能少的字符(?=\h \|)正向前瞻,在右邊斷言 1 個空格,然后|
請參閱正則運算式演示和R 演示。
例子
str <- 'Name: | |John Doe |'
regmatches(str, regexpr("Name: \\|\\h \\|\\K.*?(?=\\h \\|)", str, perl=T))
輸出
[1] "John Doe"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460012.html
上一篇:R中的函式是否可以有多個變數
下一篇:如何僅用兩個月的資料重復上述情節
