加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达中文字符

发布时间: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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读