正则表达式求问

2019-11-13 12:11:10 +08:00
 Luo2mk
如何让多个关键词至少匹配其中两个(不是全部匹配)
比如
富强,民主,文明,和谐

只匹配富强,民主,文明,和谐任意一个不可以,必须是其中两个都出现,比如富强和民主,富强和和谐
之前解决方案是:试着用 python 的 combinations 方法让多个关键字排列组合为两个为一组的组合,然后每一对的排列组合都用正则匹配一次(当两个关键字都出现则匹配)
现在想想写到一句话中
3083 次点击
所在节点    Python
10 条回复
ClericPy
2019-11-13 12:21:01 +08:00
finditer 来数数?
给点例子其实比文字描述更省时间
Luo2mk
2019-11-13 13:21:11 +08:00
@ClericPy 一个 string 如果能匹配到某一类规则内的两个关键字以上,就把这个 string 输出为某一类,用来给 string 分类的。
TomVista
2019-11-13 13:57:27 +08:00
let arr= []
/民主 /.test ( str ).push ( arr )
……
/字符 /.test ( str ).push ( arr )

判断 arr 里面的 true 的个数。。
robinjin
2019-11-13 14:20:23 +08:00
((富强|民主|文明|和谐).*?){2}
Luo2mk
2019-11-13 17:13:24 +08:00
自己解决了:用逗号来界定分组的选取范围,然后(?!\1)来从没被分组 1 选中的范围中查找词组。如果有 别的场景就把界定范围的逗号替换掉即可
(法律|条例).*,(?!\1)(法律|条例)
可以匹配到的
aaaaaaaaaa 法律啊啊啊啊啊啊啊啊啊,aaaaaa 法律 aaaaaaaa,条例,
不能匹配到的
aaaaaaaaaa 法律啊啊啊啊啊啊啊啊啊,aaaaaa 法律 aaaaaaaa,法律,
Kasumi20
2019-11-13 18:21:20 +08:00
((富强|民主|文明|和谐).*){2}

```
1 import java.lang.*
2 import lib.logger.*
3
4 val log = Logger("Global")
5
6 fun main() {
7 val regex = """((富强|民主|文明|和谐).*){2}""".toRegex()
8 println("富强, 民主".matches(regex))
9 println("自由 和谐".matches(regex))
10 }
```

true
false
f1ren2es
2019-11-13 21:00:53 +08:00
最近在看敏感词过滤的东西,这个可以用 dfa 实现不过场景简单的话就算了。。。
lihongjie0209
2019-11-13 21:22:19 +08:00
编译原理的词法分析和语法分析了解一下
TimePPT
2019-11-13 21:28:39 +08:00
用 jieba 分词控制下分词颗粒度,分词结果 unique 出来和目标词列表直接比对算命中量就完了。
TimePPT
2019-11-13 21:30:39 +08:00
李文明背了一袋富强粉。
你正则匹配直接 GG
当然,如果是做国内发帖闽橄瓷规避算我没说

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

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

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

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

© 2021 V2EX