正则表达式如何匹配包含某些词语、不包含某些词语 - V2EX
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
Furylord
V2EX    Python

正则表达式如何匹配包含某些词语、不包含某些词语

  •  
  •   Furylord 2016-09-06 09:44:55 +08:00 12428 次点击
    这是一个创建于 3332 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如,匹配:包含词语 [总行] [总部] ,不包含词语 [分行] [支行] [营业厅]

    22 条回复    2016-09-07 11:11:42 +08:00
    lhbc
        1
    lhbc  
       2016-09-06 09:47:52 +08:00 via Android
    grep -P "(总行|)" | grep -v -P "(分行|支行|营业厅)"
    按行匹配可以用这个
    fising
        2
    fising  
       2016-09-06 09:52:10 +08:00
    不包含,就是包含的否定
    knightdf
        3
    knightdf  
       2016-09-06 10:06:50 +08:00
    [] [^]
    fancy967
      &bsp; 4
    fancy967  
       2016-09-06 11:02:14 +08:00
    关注一下,是不是只能通过两次判断来完成,能不能在一个正则表达式里就完成这两个判断呢?
    murmur
        5
    murmur  
       2016-09-06 11:04:56 +08:00
    @fancy967 一次匹配完成所有判断用 AC 自动机 这个是效率最高的 只要标记哪些词语属于匹配 哪些属于不匹配就可以了 还可以打分
    whahuzhihao
        6
    whahuzhihao  
       2016-09-06 11:47:48 +08:00
    @knightdf 这个不行吧 [^总行] 是不匹配有总或者有行的
    knightdf
        7
    knightdf  
       2016-09-06 12:39:33 +08:00
    @whahuzhihao (?:)分组不就行了?
    imn1
        8
    imn1  
       2016-09-06 13:10:07 +08:00
    之前我发在 1L 的回复不见了,补一个
    搜索 正则排除 就能找到你想要的,正则排除这样写
    (?!(?:排除内容))(匹配内容)?
    imn1
        9
    imn1  
       2016-09-06 13:15:37 +08:00
    呃,上面的回复最后的问号多余的,我原来用来开关贪婪, copy 错了,后面的一对小括号按需,不是必须
    (?!(?:分行|支行|营业厅)).*总行|总部.*
    你试一下吧,我没法测试
    whahuzhihao
        10
    whahuzhihao  
       2016-09-06 13:43:31 +08:00
    @knightdf 那跟[] [^]有什么关系 环视里面也没用到中括号啊
    douyang
        11
    douyang  
       2016-09-06 14:02:13 +08:00
    cat 1.txt | grep "总行\|总部" | grep -v "分行\|支行\|营业厅"

    过滤 grep
    或者 |
    取反 -v
    转义 \

    http://linux.51yip.com/search/grep
    zhoulouzi
        12
    zhoulouzi  
       2016-09-06 14:14:38 +08:00
    ,匹配:包含词语 [总行] [总部] ,不包含词语 [分行] [支行] [营业厅]
    Furylord
        13
    Furylord  
    OP
       2016-09-06 14:36:15 +08:00
    @imn1 这个不行哈
    Furylord
        14
    Furylord  
    OP
       2016-09-06 14:39:25 +08:00
    没有能用一条正则表达式解决的办法?现在遇到的情况是,要对好多类型的名称作判断,全是 if "xxx" in name and "xxx" not in name 什么的,看着就烦也不好维护,希望找个正则表达式,我对正则表达式完全小白。。。。。网上搜了好久找不到解决的
    dofy
        15
    dofy  
       2016-09-06 14:55:00 +08:00
    包含和不包含要同时满足吗?
    kkhaike
        16
    kkhaike  
       2016-09-06 15:00:43 +08:00
    我想了下。。有“总行”的名字里会出现“分行”吗
    dofy
        17
    dofy  
       2016-09-06 15:05:07 +08:00
    看样子两个正则应该能满足要求:

    ```
    // 伪代码
    if reg1 match name and reg2 not match name
    // 应该能搞定了吧
    ```

    ![]( )
    SakuraKuma
        18
    SakuraKuma  
       2016-09-06 15:10:49 +08:00
    /^.+(总[行|部])(?!(.*分行|.*支行|.*营业厅)).*$/
    zhoulouzi
        19
    zhoulouzi  
       2016-09-06 15:33:00 +08:00
    默认 分行 一定会出现在 总行后边 默认 总行 分行之间不会有任何字符的情况下: (总(行|部))(?!([分支]行|营业厅)) 可是正则是用来捕获了。~~
    hyrious
        20
    hyrious  
       2016-09-07 07:58:42 +08:00 via Android
    大家好我不会正则
    直接判字符串包含感觉更直觉和快
    Furylord
        21
    Furylord  
    OP
       2016-09-07 11:11:00 +08:00
    看来只能用两个正则了
    Furylord
        22
    Furylord  
    OP
       2016-09-07 11:11:42 +08:00
    @hyrious 主要是觉得直接判断看起来比较累赘,所以想拿正则表达式解决啦
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3450 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:43 PVG 18:43 LAX 03:43 JFK 06:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86