V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
mantis
V2EX  ›  PHP

一个字符串拆分问题

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

    字符串拆分问题:

    有如下字符串:

    你关注的杨幂有 10 个未看
    

    有如下关键字:

    ["杨幂", 10]
    

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

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

    该怎么解决?

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

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

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