V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Luo2mk
V2EX  ›  Python

正则表达式求问

  •  
  •   Luo2mk · 2019-11-13 12:11:10 +08:00 · 3114 次点击
    这是一个创建于 1870 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如何让多个关键词至少匹配其中两个(不是全部匹配)
    比如
    富强,民主,文明,和谐

    只匹配富强,民主,文明,和谐任意一个不可以,必须是其中两个都出现,比如富强和民主,富强和和谐
    之前解决方案是:试着用 python 的 combinations 方法让多个关键字排列组合为两个为一组的组合,然后每一对的排列组合都用正则匹配一次(当两个关键字都出现则匹配)
    现在想想写到一句话中
    第 1 条附言  ·  2019-11-13 13:39:50 +08:00

    类似于如下正则逻辑

    ((互联网.*温度)|(温度.*互联网))
    
    

    但是不一样的是,分组内的词不止是“温度”“互联网”而是由多个数量不确定的词组成

    10 条回复    2019-11-13 21:30:39 +08:00
    ClericPy
        1
    ClericPy  
       2019-11-13 12:21:01 +08:00
    finditer 来数数?
    给点例子其实比文字描述更省时间
    Luo2mk
        2
    Luo2mk  
    OP
       2019-11-13 13:21:11 +08:00
    @ClericPy 一个 string 如果能匹配到某一类规则内的两个关键字以上,就把这个 string 输出为某一类,用来给 string 分类的。
    TomVista
        3
    TomVista  
       2019-11-13 13:57:27 +08:00 via Android
    let arr= []
    /民主 /.test ( str ).push ( arr )
    ……
    /字符 /.test ( str ).push ( arr )

    判断 arr 里面的 true 的个数。。
    robinjin
        4
    robinjin  
       2019-11-13 14:20:23 +08:00
    ((富强|民主|文明|和谐).*?){2}
    Luo2mk
        5
    Luo2mk  
    OP
       2019-11-13 17:13:24 +08:00
    自己解决了:用逗号来界定分组的选取范围,然后(?!\1)来从没被分组 1 选中的范围中查找词组。如果有 别的场景就把界定范围的逗号替换掉即可
    (法律|条例).*,(?!\1)(法律|条例)
    可以匹配到的
    aaaaaaaaaa 法律啊啊啊啊啊啊啊啊啊,aaaaaa 法律 aaaaaaaa,条例,
    不能匹配到的
    aaaaaaaaaa 法律啊啊啊啊啊啊啊啊啊,aaaaaa 法律 aaaaaaaa,法律,
    Kasumi20
        6
    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
        7
    f1ren2es  
       2019-11-13 21:00:53 +08:00
    最近在看敏感词过滤的东西,这个可以用 dfa 实现不过场景简单的话就算了。。。
    lihongjie0209
        8
    lihongjie0209  
       2019-11-13 21:22:19 +08:00
    编译原理的词法分析和语法分析了解一下
    TimePPT
        9
    TimePPT  
       2019-11-13 21:28:39 +08:00
    用 jieba 分词控制下分词颗粒度,分词结果 unique 出来和目标词列表直接比对算命中量就完了。
    TimePPT
        10
    TimePPT  
       2019-11-13 21:30:39 +08:00
    李文明背了一袋富强粉。
    你正则匹配直接 GG
    当然,如果是做国内发帖闽橄瓷规避算我没说
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2441 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:04 · PVG 00:04 · LAX 08:04 · JFK 11:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.