mantis
V2EX  ›  PHP

一个字符串拆分问题

  •  
  •   mantis · Sep 13, 2022 · 4355 views
    This topic created in 1518 days ago, the information mentioned may be changed or developed.

    字符串拆分问题:

    有如下字符串:

    你关注的杨幂有 10 个未看
    

    有如下关键字:

    ["杨幂", 10]
    

    将字符串按关键字拆分为数组:

    ["你关注的", "杨幂", "有", 10, "个未看"]
    

    该怎么解决?

    22 replies  •  2022-09-14 16:24:41 +08:00
    Kinnice
    Kinnice
    Sep 13, 2022
    1
    preg_split
    leoQaQ
    leoQaQ
    Sep 13, 2022
    2
    1. 先用"杨幂"去拆分数组,得到 ["你关注的","有 10 个未看"];
    2. 把"杨幂" 插入数组,得到["你关注的","杨幂","有 10 个未看"];
    3. 再用第二个关键字"10" 去拆分新数组的后一个元素, 得到["有","个未看"];
    4. 把"10" 插入数组,然后就没有然后了
    2kCS5c0b0ITXE5k2
    2kCS5c0b0ITXE5k2
    Sep 13, 2022
    3
    正则
    crayygy
    crayygy
    Sep 13, 2022
    4
    jieba ?
    Kinnice
    Kinnice
    Sep 13, 2022
    5
    <?php
    $arr = preg_split("/(10|杨幂)/","你关注的杨幂有 10 个未看", -1, PREG_SPLIT_DELIM_CAPTURE);
    print_r ($arr);
    ?>
    Jooooooooo
    Jooooooooo
    Sep 13, 2022
    6
    边缘的 case 如果要拆分 "杨幂" 和 "幂有" 结果是啥?
    eason1874
    eason1874
    Sep 13, 2022
    7
    1 、像 #5 那样用正则
    2 、先用 str_replace 在关键词前后插入分隔符,再用 explode 分割成数组

    数量大的话,两种都试试,有些场景第二种比较快
    ipwx
    ipwx
    Sep 13, 2022❤️2
    8
    楼主的原问题是什么。

    总觉得又是个 XY problem
    lmshl
    lmshl
    Sep 13, 2022❤️1
    9
    先确定下你这是不是一个 NLP 需求
    lmshl
    lmshl
    Sep 13, 2022
    10
    sadfQED2
    sadfQED2
    Sep 13, 2022 via Android
    11
    你原问题是啥?看你样子似乎是需要做中文分词?
    cydian
    cydian
    Sep 13, 2022
    12
    @lmshl 这是啥网站或工具?
    PythonYXY
    PythonYXY
    Sep 13, 2022
    14
    构建一个有限状态自动机即可
    asLw0P981N0M0TCC
    asLw0P981N0M0TCC
    Sep 13, 2022
    15
    怎么和百度搜索 关键词标红有点像
    air8712
    air8712
    Sep 13, 2022
    16
    字典树
    haolongsun
    haolongsun
    Sep 13, 2022
    17
    不确定的句子->词法分析,直接上 NLP
    固定的句子,就像你这个只有关键词是可变的,那么直接正则就 ok
    cowcomic
    cowcomic
    Sep 13, 2022
    19
    词表有多大?
    如果词表很大,百以上,可以上一些 NLP 技术,比如 Trie 树,做词表扫描,再根据扫描结果分割
    如果词表不大,几十以内,for 循环和正则都可以
    fkdog
    fkdog
    Sep 13, 2022
    20
    楼主问的是全文检索里用的分词,还是说希望将一个字符串按照指定关键词分割开来?
    jinliming2
    jinliming2
    Sep 14, 2022
    21
    <?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);
    xupefei
    xupefei
    Sep 14, 2022
    22
    AC 自动机
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1370 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 17:00 · PVG 01:00 · LAX 09:00 · JFK 12:00
    ♥ Do have faith in what you're doing.