V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mugglezzz
V2EX  ›  问与答

请教一个字符串匹配的正则,或者有其他解决方法也可

  •  1
     
  •   mugglezzz · 2021-02-23 15:55:38 +08:00 · 749 次点击
    这是一个创建于 1361 天前的主题,其中的信息可能已经有所发展或是发生改变。

    源数据 list<string>:

    1.张三关于工作的说明
    2.一份来自李四的说明
    3.张三关于上班之看法
    4.王五写了一份关于工作的总结

    我的参数配置为:#关于#的# , #为需要模糊匹配的地方,那么我想要筛选出来的结果数据为 1 、4
    这个参数配置是可修改的

    请问正则应该咋写呢?或者有其他的筛选方式吗?谢谢各位

    6 条回复    2021-02-24 09:30:02 +08:00
    br_wang
        1
    br_wang  
       2021-02-23 17:39:47 +08:00
    就当前这个问题 `/^(.+)关于(.+)的(.+)$/` 这样是可以应付的。

    「这个参数配置是可修改的」,可以改是啥意思?修改「关于」和「的」关键字?还是「#」的位置,还是定义?
    mugglezzz
        2
    mugglezzz  
    OP
       2021-02-23 18:02:29 +08:00
    @br_wang #1 谢谢回答, [修改「关于」和「的」关键字?还是「#」的位置] ,这两种都有可能。我的做法是会用#分割这个配置参数,然后循环拼接出来这个正则,只是我不知道这个正则的规则是啥
    Sunyanzi
        3
    Sunyanzi  
       2021-02-23 19:24:56 +08:00
    我没明白为啥你要循环拼正则出来 ... 看你顶楼的描述好像是 Java ... 对应写法如下 ...

    Pattern.matches( "#关于#的#".replace( "#", ".+" ), sentence );

    最前面的字符串是参数配置 ... 可以随意修改但需要注意不能含有正则关键字如点儿加号括号一类的 ...

    后面 sentence 是你要匹配的字符串 ... 正常情况下直接用这个匹配作为 filter 规则过一遍 List 就好 ...
    br_wang
        4
    br_wang  
       2021-02-23 19:32:15 +08:00
    @Sunyanzi 我猜 @mugglezzz 的意思就是,同一个方法要分次处理不同的文本格式对应的数据源,所以这个正则是根据传入的配置参数来生成的,比如:

    - 运行 1:符合规则「#关于#的#」的 str
    - 运行 2:符合规则「#昨天#会议」的 str

    但如果应对#占位符可存在或不存在的场景,至少要用到后向查找之类的能力,生成正则就会复杂一些了……
    Sunyanzi
        5
    Sunyanzi  
       2021-02-23 20:03:24 +08:00
    @br_wang 如果是这样的话 ... 那是不是把配置作为参数传进来就好呢 ..?

    比如外层做一个循环 ... 第一次用配置 Ⅰ 过一遍 ... 第二次用配置 Ⅱ 再过一遍 ...

    或者如果需要不同的 sentence 使用不同的规则 ... 在源 List 里面分组就好 ...

    至于正则那一堆断言 ... 我不觉得楼主会用到 ... 毕竟功能里不涉及捕获规则 ... 只是模糊匹配而已 ...

    最后 # 不存在的情况 ... 我没太明白这会有什么问题 ... 从语义上看就是去掉模糊的部分 ...

    所以这时候 matches() 实际上就是 equals() ... 我的代码可以正常运行结果也符合预期不是吗 ...
    mugglezzz
        6
    mugglezzz  
    OP
       2021-02-24 09:30:02 +08:00
    @br_wang #4
    @Sunyanzi #5
    是的,我的场景就是 4 楼说的那样,由于我可能想要得到的结果不一样,所以传入的配置参数不一样,所以我在代码里面,正则就只能每次用#分割来拼接出来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2815 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:46 · PVG 13:46 · LAX 21:46 · JFK 00:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.