正则表达中文字符

前端之家收集整理的这篇文章主要介绍了正则表达中文字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找文字:本周(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"

猜你在找的正则表达式相关文章