字符串拆分问题:
有如下字符串:
你关注的杨幂有 10 个未看
有如下关键字:
["杨幂", 10]
将字符串按关键字拆分为数组:
["你关注的", "杨幂", "有", 10, "个未看"]
该怎么解决?
![]() | 1 Kinnice 2022-09-13 16:03:26 +08:00 preg_split |
![]() | 2 leoQaQ 2022-09-13 16:07:22 +08:00 1. 先用"杨幂"去拆分数组,得到 ["你关注的","有 10 个未看"]; 2. 把"杨幂" 插入数组,得到["你关注的","杨幂","有 10 个未看"]; 3. 再用第二个关键字"10" 去拆分新数组的后一个元素, 得到["有","个未看"]; 4. 把"10" 插入数组,然后就没有然后了 |
3 2kCS5c0b0ITXE5k2 2022-09-13 16:07:41 +08:00 正则 |
![]() | 4 crayygy 2022-09-13 16:10:27 +08:00 jieba ? |
![]() | 5 Kinnice 2022-09-13 16:12:49 +08:00 <?php $arr = preg_split("/(10|杨幂)/","你关注的杨幂有 10 个未看", -1, PREG_SPLIT_DELIM_CAPTURE); print_r ($arr); ?> |
6 Jooooooooo 2022-09-13 16:17:54 +08:00 边缘的 case 如果要拆分 "杨幂" 和 "幂有" 结果是啥? |
![]() | 7 eason1874 2022-09-13 16:23:11 +08:00 1 、像 #5 那样用正则 2 、先用 str_replace 在关键词前后插入分隔符,再用 explode 分割成数组 数量大的话,两种都试试,有些场景第二种比较快 |
8 ipwx 2022-09-13 16:25:45 +08:00 ![]() 楼主的原问题是什么。 总觉得又是个 XY problem |
9 lmshl 2022-09-13 16:27:44 +08:00 ![]() |
10 lmshl 2022-09-13 16:29:37 +08:00 |
![]() | 11 sadfQED2 2022-09-13 16:45:10 +08:00 via Android 你原问题是啥?看你样子似乎是需要做中文分词? |
13 lmshl 2022-09-13 17:08:04 +08:00 ![]() |
14 PythonYXY 2022-09-13 17:13:47 +08:00 构建一个有限状态自动机即可 |
![]() | 15 asLw0P981N0M0TCC 2022-09-13 17:16:24 +08:00 怎么和百度搜索 关键词标红有点像 |
16 air8712 2022-09-13 17:40:11 +08:00 字典树 |
17 haolongsun 2022-09-13 20:44:47 +08:00 不确定的句子->词法分析,直接上 NLP 固定的句子,就像你这个只有关键词是可变的,那么直接正则就 ok |
![]() | 18 lisongeee 2022-09-13 20:56:45 +08:00 |
![]() | 19 cowcomic 2022-09-13 22:16:04 +08:00 词表有多大? 如果词表很大,百以上,可以上一些 NLP 技术,比如 Trie 树,做词表扫描,再根据扫描结果分割 如果词表不大,几十以内,for 循环和正则都可以 |
20 fkdog 2022-09-13 22:48:05 +08:00 楼主问的是全文检索里用的分词,还是说希望将一个字符串按照指定关键词分割开来? |
21 jinliming2 2022-09-14 00:27:05 +08:00 <?php $arr = preg_split("/(?<=^你关注的|有\\s)(?:\\B|\\b)|(?:\\B|\\b)(?=(?:有\\s\\d+)?\\s 个未看)/", "你关注的杨幂有 10 个未看"); print_r ($arr); $arr2 = preg_split("/(你关注的)(\S+)(有)\s*(\d+)\s*(个未看)/", "你关注的杨幂有 10 个未看", -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); print_r ($arr2); |
![]() | 22 xupefei 2022-09-14 16:24:41 +08:00 AC 自动机 |