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

2021-02-23 15:55:38 +08:00
 mugglezzz

源数据 list<string>:

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

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

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

749 次点击
所在节点    问与答
6 条回复
br_wang
2021-02-23 17:39:47 +08:00
就当前这个问题 `/^(.+)关于(.+)的(.+)$/` 这样是可以应付的。

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

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

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

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

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

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

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

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

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

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

所以这时候 matches() 实际上就是 equals() ... 我的代码可以正常运行结果也符合预期不是吗 ...
mugglezzz
2021-02-24 09:30:02 +08:00
@br_wang #4
@Sunyanzi #5
是的,我的场景就是 4 楼说的那样,由于我可能想要得到的结果不一样,所以传入的配置参数不一样,所以我在代码里面,正则就只能每次用#分割来拼接出来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/755509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX