正则表达中文字符
发布时间:2020-12-14 02:29:04 所属栏目:百科 来源:网络整理
导读:我正在寻找文字:本周(3月25日 – 3月31日),国内油厂开机率继续下降,全国各地油厂大豆压榨总量1456000吨(出粕1157520吨,出油262080吨),较上周的… [续] crush - str_extract(string = text_,pattern = perl("(?=量).*(?=吨(出粕)")) meal - str_extract(stri
我正在寻找文字:本周(3月25日 – 3月31日),国内油厂开机率继续下降,全国各地油厂大豆压榨总量1456000吨(出粕1157520吨,出油262080吨),较上周的… [续]
crush <- str_extract(string = text_,pattern = perl("(?<=量).*(?=吨(出粕)")) meal <- str_extract(string = text_,pattern = perl("(?<=粕).*(?=吨,出)")) oil <- str_extract(string = text_,pattern = perl("(?<=出油).*(?=吨))")) 版画 [1] "1456000" ## correct [1] "1157520" ## correct [1] NA ## looking for 262080 here 为什么前两个匹配但不是最后一个匹配?我正在使用stringr库.
请注意,当前版本的stringr包基于ICU正则表达式库,并且不推荐使用perl().
请注意,lookbehind模式是固定宽度的,似乎ICU如何解析lookbehind模式中的第一个字母(由于某些未知原因无法计算其宽度). 由于您使用的是stringr,因此您可以依靠使用str_match实现的捕获来提取模式的一部分: > match <- str_match(s,"出油(d+)吨") > match[,2] [1] "262080" 这样,您将来可以避免任何最终问题.此外,这些正则表达式执行得更快,因为在搜索字符串中的每个位置执行的模式中没有未锚定的lookbehind. 此外,您可以使用PCRE正则表达式与基数R: > regmatches(s,regexpr("(?<=出油)d+(?=吨)",s,perl=TRUE)) [1] "262080" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |