楼主: 球球你
397 8

[程序分享] 求大神解答 [推广有奖]

  • 0关注
  • 0粉丝

初中生

85%

还不是VIP/贵宾

-

威望
0
论坛币
12 个
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
245 点
帖子
10
精华
0
在线时间
17 小时
注册时间
2018-4-29
最后登录
2018-7-29

球球你 发表于 2018-7-8 02:17:07 |显示全部楼层
请问就是怎样写代码才能只取出中文的字符串?
关键词:字符串 R语言

6INO96O09R))MLZZ(67M0~X.png
stata SPSS
凯旋の王者 学生认证  发表于 2018-7-8 02:38:22 |显示全部楼层
本帖最后由 凯旋の王者 于 2018-7-8 02:43 编辑

解决思路:把汉字按一个汉字在编码下按其在完整性正则分割成数组,再根据需要取截取长度;


1、实现方法函数


开启mbstring扩展,然后自定义函数:


    <?php
    header('content-Type:text/html:charset=utf-8');
    function substr_chinese($str, $start, $length = null) {
    return join("",
    array_slice(
    preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $start, $length)
    );
    }
    //实例
    $str = "中国地图全图";
    echo substr_utf8($str, 0, 4);
    //输出: 中国地图
    ?>



2、主要函数功能说明preg_split:
对于初学者来说,大家对 说明 array preg_split ( string $pattern, string $subject [, int $limit [, int $flags]] )
返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。
如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags。
flags 可以是下列标记的任意组合(用按位或运算符 | 组合):
PREG_SPLIT_NO_EMPTY
如果设定了本标记,则 preg_split() 只返回非空的成分。
PREG_SPLIT_DELIM_CAPTURE
如果设定了本标记,定界符模式中的括号表达式也会被捕获并返回。本标记添加于 PHP 4.0.5。
PREG_SPLIT_OFFSET_CAPTURE

如果设定了本标记,如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。


提示
如果不需要正则表达式的功能,可以选择使用更快(也更简单)的替代函数如 explode() 或 str_split()。


3、array_slice说明:
array_slice() 函数在数组中根据条件取出一段值,并返回。


    <?php
    $a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
    print_r(array_slice($a,1,2));
    ?>
    输出:Array ( [0] => Cat [1] => Horse )


本文讲述了PHP 怎样写代码才能只取出中文的字符串,希望本文能给腻带来灵感,帮助你解决疑问,感谢阅读本文。
已有 3 人评分论坛币 热心指数 收起 理由
逐梦的太阳 + 5 热心帮助其他会员
cheetahfly + 10 热心帮助其他会员
happy_287422301 + 100 热心帮助其他会员

总评分: 论坛币 + 110  热心指数 + 5   查看全部评分

回复

使用道具 举报

泪眼迷蒙 发表于 2018-7-8 05:52:54 来自手机 |显示全部楼层
球球你 发表于 2018-7-8 02:17
请问就是怎样写代码才能只取出中文的字符串?
利用Excel中的左提取函数LEFT
其中的最后一个参数是字符串函数减去7<br>
就解决了!!<br>
没必要太麻烦!
已有 2 人评分论坛币 热心指数 收起 理由
逐梦的太阳 + 5 热心帮助其他会员
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10  热心指数 + 5   查看全部评分

回复

使用道具 举报

球球你 发表于 2018-7-8 07:57:33 |显示全部楼层
泪眼迷蒙 发表于 2018-7-8 05:52
利用Excel中的左提取函数LEFT
其中的最后一个参数是字符串函数减去7
就解决了!!
不行啊,要用R语言写
回复

使用道具 举报

球球你 发表于 2018-7-8 07:59:00 |显示全部楼层
凯旋の王者 发表于 2018-7-8 02:38
解决思路:把汉字按一个汉字在编码下按其在完整性正则分割成数组,再根据需要取截取长度;
用代码怎么写?R语言
回复

使用道具 举报

陈小瓜的丝瓜 发表于 2018-7-8 11:29:49 |显示全部楼层
如果方括弧内的长度是固定的话,试试这个:
  1. substr(as.character(df$A), 1, nchar(as.character(df$A))-7)
复制代码

如果方括弧内的长度不固定,建议用strsplit,注意要先把因子转化为character类型。
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 精彩帖子

总评分: 论坛币 + 10   查看全部评分

回复

使用道具 举报

屋檐滴语 发表于 2018-7-8 23:59:03 |显示全部楼层
听说stringr是专门处理字符的,可以试试。
已有 1 人评分热心指数 收起 理由
逐梦的太阳 + 5 热心帮助其他会员

总评分: 热心指数 + 5   查看全部评分

回复

使用道具 举报

皮皮磊 学生认证  发表于 2018-7-9 10:40:09 |显示全部楼层
我觉得你可是试试用jieba分词分一下,或者找正则匹配。
已有 1 人评分热心指数 收起 理由
逐梦的太阳 + 5 热心帮助其他会员

总评分: 热心指数 + 5   查看全部评分

回复

使用道具 举报

cheetahfly 在职认证  发表于 2018-7-9 13:57:38 |显示全部楼层
stringr::str_remove_all("df$A", "[\\[\\]0-9]")
已有 1 人评分热心指数 收起 理由
逐梦的太阳 + 5 热心帮助其他会员

总评分: 热心指数 + 5   查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

GMT+8, 2018-11-15 12:42