精华内容
下载资源
问答
  • 2015-01-29 19:23:22

    前面我们说到了如何在Python正则表达式z中匹配中文,说到了另一种方法,这就是如何巧妙的使用Python正则表达式匹配模式的问题了

    Python匹配模式

    re.compile(strPattern[, flag]):

    这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。 第二个参数flag是匹配模式,取值可以使用按位或运算符'|'表示同时生效,比如re.I | re.M。另外,你也可以在regex字符串中指定模式,比如re.compile('pattern', re.I | re.M)与re.compile('(?im)pattern')是等价的。
    可选值有:

    主要非英文语系字符范围

    模式名称说明
    re.Ire.IGNORECASE忽略大小写(括号内是完整写法,下同)
    re.MMULTILINE多行模式,改变'^'和'$'的行为
    re.SDOTALL点任意匹配模式,改变'.'的行为, 使".“可以匹配任意字符
    re.LLOCALE使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
    re.UUNICODE使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
    re.XVERBOSE详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。以下两个正则表达式是等价的:

     

    具体参见如下代码

     

    #!coding:utf-8
    
    import re
    import sys
    import urllib2
    
    
    # 测试匹配中文信息
    def TestReChinese( ):
        reload(sys)
        sys.setdefaultencoding( "utf-8" )
    
        # 这段HTML代码是从博客列表页面中摘取出来的单个博客的信息, 我们要从中摘取出
        page  =   r"""<div class="list_item article_item">
                
        <div class="article_title">   
            <span class="ico ico_type_Original">
            </span>
                    
            <h1>
                <span class="link_title">
                    <a href="/gatieme/article/details/43235791">
                    Python正则表达式匹配中文
                    </a>
                </span>
            </h1>
        </div>
    
        <div class="article_description">
        在使用Python的过程中,由于需求原因,我们经常需要在文本或者网页元素中用Python正则表达式匹配中文,但是我们经常所熟知的正则表达式却只能匹配英文,而对于中文编码却望尘莫及,于是我大量Google,几经Baidu,花了两个多个小时测试,终于发现解决的办法。特记录如下    字符串的角度来说,中文不如英文整齐、规范,这是不可避免的现实。本文结合网上资料以及个人经验,以 python 语言为例,...        
        </div>
            
        <div class="article_manage">
                
            <span class="link_postdate">2015-01-28 19:34
            </span>
                
            <span class="link_view" title="阅读次数">
                <a href="/gatieme/article/details/43235791" title="阅读次数">阅读</a>(64)
            </span>
                
            <span class="link_comments" title="评论次数">
                <a href="/gatieme/article/details/43235791#comments" title="评论次数" οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(0)
            </span>
        
            <span class="link_edit"><a href="http://write.blog.csdn.net/postedit/43235791" title="编辑">编辑</a>
            </span>
                
            <span class="link_delete"><a href="javascript:void(0);" οnclick="javascript:deleteArticle(43235791);return false;" title="删除">删除</a>
            </spa    </div>
    
        <div class="clear">
        </div>
    </div>"""
        req = urllib2.Request("http://blog.csdn.net/gatieme/article/list/1")                # 建立页面请求
        req.add_header("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)")
                
        try:
            cn = urllib2.urlopen(req)
            page = cn.read( )
            unicodePage = page.decode("utf-8")
            cn.close( )
        except urllib2.URLError, e:
            print 'URLError:', e.code
            return
        except urllib2.HTTPError, e:
            print 'HTTP Error:' + e.reason
            return   
    
        # 从博客页面中匹配出每个博客的地                                                                           址
        reHtml = r'<span class="link_title"><a href="(.*?)">\s*(.*?)\s*</a></span>.*?<span class="link_postdate">(.*?)</span>\s*<span class="link_view" title=".*?"><a href="(.*?)" title=".*?">.*?</a>(.*?)</span>\s*<span class="link_comments" title=".*?"><a href="(.*?)#comments" title=".*?" οnclick=".*?">.*?</a>(.*?)</span>'
    #####-----------------------------------------------------------  
        # [示例1]----写法1 匹配失败, 无法匹配中文
        # pattern = re.compile(reHtml)
        # myItems = re.findall(pattern, unicodePage)  
    
        # [示例1]----写法2 匹配失败, 无法匹配中文
        # myItems = re.findall(reHtml, unicodePage)   
    #####-----------------------------------------------------------
    
    #####-----------------------------------------------------------
        # [示例2]----写法1, 匹配成功, re.S使用DOTALL模式可以匹配中文
        # 写法说明  
        #   Ⅰ将字符串编译成re.S[DOTALL]模式下正则表达式
        #   Ⅱ在使用正则表达式文本或者HTML代码中匹配博客信息
        pattern = re.compile(reHtml, re.S)
        myItems = re.findall(pattern, unicodePage)
     
        # [示例2]----写法2, 匹配成功, re.S使用DOTALL模式可以匹配中文
        #   Ⅰ将字符串编译成re.S[DOTALL]模式下正则表达式
        #   Ⅱ直接用编译好的正则表达式在文本或者HTML代码中匹配博客信息
        # pattern = re.compile(reHtml, re.S)
        # myItems = pattern.findall(unicodePage)
    
        # [示例2]----写法3, 匹配成功, re.S使用DOTALL模式可以匹配中文
        #   Ⅰ
        #   Ⅱ不编译正则表达式,直接在文本或者HTML代码中匹配博客信息
        # myItems = re.findall(reHtml, unicodePage, re.S)
    
        print len(myItems)
        # print myItems
        for item in myItems:
            urlTitle = item[0].replace("\n", "")
            urlView = item[3].replace("\n", "")
            urlComments = item[5].replace("\n", "")
            # 由于匹配时使用了贪婪模式, 为了匹配出现错误,
            # 将某一篇的标题与另一篇博客的发表时间, 阅读次数或者评论条数混淆的匹配成一篇博客信息
            # 因此在匹配时,重复的匹配了博客的地址信息
            # 当且仅当,博客标题附带的地址信息与博客阅读次数以及评论条数附带的地址信息时同一篇博客的地址时,
            # 我们才认为匹配成功
            if (urlTitle == urlView) and (urlTitle == urlComments):
                print "#------------------------------------------------------"
                print "地址:", item[0].replace("\n", ""),       # 博客地址URL1(标题附带)
                print "标题:", item[1].replace("\n", ""),         # 博客标题
                print "时间:", item[2].replace("\n", ""),         # 博客发表时间
                print "阅读:", item[4].replace("\n", ""),         # 博客阅读次数信息
                print "评论:", item[6].replace("\n", "")         # 博客评论条数
                print "#-----------------------------------------------------"
                print 
                print 
    
    
    if __name__ == "__main__" :
        # 测试正则表达式
    
        reload(sys)
        sys.setdefaultencoding("utf-8")
    
        TestReChinese( )
    

    更多相关内容
  • RE2是用于通用文本匹配应用程序的快速而强大的神经体系结构。 在文本匹配任务中,模型将两个文本序列作为输入并预测它们之间的关系。 该方法旨在探讨在这些任务中什么足以增强性能。 它简化或省略了许多缓慢的组件,...
  • 这是共识感知视觉语义嵌入(CVSE) ,这是论文《的官方源代码。 它基于PyTorch中的构建。 抽象的: 图像文本匹配在桥接视觉和语言方面起着核心作用。 大多数现有方法仅依靠图像-文本实例对来学习它们的表示,从而...
  • 数字图像处理(DIA)相关实验,包括matlab的源代码、效果图与论文等参考资料。 任务描述: 1. 给定一对图像,利用提取好的SIFT特征文件,根据距离阈值准则(跨图像的局部SIFT特征距离小于0.4),得到图像间的初始...
  • 文本匹配】表示型模型

    千次阅读 2020-07-20 23:53:47
    对于对称的文本匹配任务,采用共享的编码器和文本表示DNNs无疑是合理的选择,从而也可以获取各文本在统一语义空间的表示方法。 基于表示的匹配模型结构紧凑,可变的花样并不多,主要集中在: (1)如何更好的获取...

    基于表示的匹配模型的基本结构包括:

    (1)嵌入层,即文本细粒度的嵌入表示;

    (2)编码层,在嵌入表示的基础上进一步编码;

    (3)表示层:获取各文本的向量表征;

    (4)预测层:对文本pair的向量组进行聚合,从而进行文本关系的预测
    在这里插入图片描述
    对于对称的文本匹配任务,采用共享的编码器和文本表示DNNs无疑是合理的选择,从而也可以获取各文本在统一语义空间的表示方法。

    基于表示的匹配模型结构紧凑,可变的花样并不多,主要集中在:

    (1)如何更好的获取文本表征,即图中编码器和DNNs如何构造;

    (2)如何更好的比较文本表征间的相似度。

    这也是各典型模型主要的差异点,下面依次介绍这些典型模型:

    1 DSSM及其变种
    1.1 DSSM

    Deep Structured Semantic Models(DSSM)是一种基于网络检索点击数据来获取query和title间语义相关性的模型,也是表示型匹配模型的鼻祖,其架构基本定义了后续各表示型匹配模型的基本范式。
    在这里插入图片描述
    DSSM主要的结构模块和要点包括:

    (1)word hash:原始输入层为50w词汇构成的one-hot编码向量,为了保证训练的可行,本文提出了一种word hashing算法,通过对英文词进行n-letters的切分(如将word改写为#word#,采用3-letters切分为#wo,wor,ord,rd#),从而实现了term-level维度的压缩。word hash,类似于BPE,是一种常见的英文单词编码方式,但这种做法无法直接移植到中文embedding中;

    (2)多层的MLP:表示层通过全连接的方式独立的对qurey和doc进行信息压缩和特征提取,最终得到句子和文档的语义表征;

    (3)softmax预测层:DSSM损失函数的构造采用了list-wise rank的做法,采样得到一个正例和若干负例作为sample,通过计算query与doc语义表征的夹角余弦作为相似度logits,然后通过softmax进行归一化,最后通过MLE进行参数的学习。

    DSSM的模型简单高效,采用海量点击曝光日志数据的监督学习进行训练,能够快速获取IR结果,但其存在如下不足:

    (1)点击曝光日志并不能意味着着q-t间语义的近似程度,因此用起作为语义相似模型训练的依据是值得推敲的;

    (2)期嵌入层简单采用了one-hot编码型式,忽略了语法和意义层面的表征;

    (3)多层MLP的方式参数众多、形式单一,影响模型训练的效率;

    (4)预测层仅仅通过夹角余弦的方式判断相似性,其表达能力稍弱。

    1.2 CDSSM

    针对DSSM在网络架构方面的局限性,后续提出了各种变种,首先介绍采用CNN进行表示的CDSSM模型:
    在这里插入图片描述

    CDSSM主要的结构模块和要点包括:

    (1)嵌入层:在text sequence的首、尾添加了特殊的<s> token,以补充句子的边界特征,各token仍采用word hashing策略进行编码;

    (2)编码层:采用n-gram的滑动窗口选取local term特征(原文直接拼接3-gram的向量表征,3*30k=90k);

    (3)表示层:卷积— >池化—>卷积的表示层编码器。具体而言:通过MLP将高维度的local term特征映射到低维特征,然后在sequence length维度进行max pooling,从而将变长的文本统一为相同长度的向量特征,借着再通过一个MLP进一步压缩特征维度,以此作为文本向量表征;

    (4)预测层:与DSSM采取相同损失函数、相似度计算策略。

    CDSSM在编码层采用n-gram获取滑动窗口内的上下文信息,在表示层采用全局最大池化获取全文的上下文信息,从而能更好的获取语义表征,但由于滑动窗口大小的限制,仍无法获得较长距离的上下文依赖关系。

    1.3 LSTM-DSSM

    LSTM-DSSM模型将DSSM中的MPL层替换为LSTM层,将最后一个token的隐藏层输出作为句子表征,模型其它的设定与DSSM和CDSSM类似,这里不加赘述。

    在这里插入图片描述

    1.4 MV-DSSM

    Multi-View DSSM将DSSM推广到用户推荐领域,其保留了DSSM的模型架构,创新点在于将不同信息源在统一语义空间进行编码。

    在这里插入图片描述

    2. SiamCNN和SiamLSTM

    前文提及对称的文本匹配任务中常采用共享的编码器和文本表示DNNs,SiamCNN和SiamLSTM就是针对QA问题分别采用CNN模块和LSTM模块的经典模型。

    2.1 SiamCNN

    SiamCNN的提出者针对表示型文本匹配模型的两个核心步骤,分别对比了大量的CNN双塔模型方案以及相似性计算的方法。

    在CNN双塔模型方案中,共对比了如下6种方案:

    (1)q-a分别采用单独的Hidden-Layer(MLP+tanh激活函数)+ 单独的CNN + 1-D最大池化

    (2)q-a采用共享的Hidden-Layer(MLP+tanh激活函数)+ 共享的CNN + 1-D最大池化

    (3)q-a采用共享的Hidden-Layer(MLP+tanh激活函数)+ 共享的CNN + 1-D最大池化 + 单独的Hidden-Layer

    (4)q-a采用共享的Hidden-Layer(MLP+tanh激活函数)+ 共享的CNN + 1-D最大池化 + 共享的Hidden-Layer

    (5)q-a采用共享的Hidden-Layer(MLP+tanh激活函数)+ 共享的CNN + 1-D最大池化 + 共享的CNN

    (6)q-a采用共享的Hidden-Layer(MLP+tanh激活函数)+ 共享的CNN + 共享的CNN + Skip-Connection + 1-D最大池化 +

    在文本向量相似度的计算中,共对比了如下9种方案:

    (1)夹角余弦;(2)多项式核函数;(3)sigmoid核函数;(4)高斯核函数;(5)欧氏距离;(6)指数核函数;(7)曼哈顿距离;(8)GESD;(9)AESD

    本文采用了pair-wise rank的损失计算方法,即一对正、负样本的Hinge Loss。在文章采用的数据集上,模型方案(2)取得最佳结果,而GESD和AESD的相似度计算方法表现更好。
    在这里插入图片描述

    2.2 SiamLSTM

    SiamLSTM的提出者采用LSTM的文本表征,并直接以文本表示pair的 e − ∣ x 1 − x 2 ∣ e^{-|x_1-x_2|} ex1x2作为最终归一化的相似度结果。
    在这里插入图片描述

    3. ARC-I

    ARC-I模型采用重复堆叠的"CNN+k-Pooling"获取相邻n-gram间的语义关系,最后通过MLP得到句子相似度。

    在这里插入图片描述

    4. Multi-view

    Multi-view是一种适用于多轮对话匹配的表示型模型。

    在这里插入图片描述

    对于多轮对话文本,该模型采用了两种文本表示方案(因此被成为Multi View):

    (1)word-level的文本表示:对上下文utterance进行拼接,中间以特殊的 token划分,然后采用GRU模型取最后一个token的隐藏层输出作为整个文本的语义表征;

    (2)utterance-level的文本表示:采用类似HAN的层级架构,首先利用CNN+1D Max-Pooling获取每个utterance的向量表示,然后再利用GRU结构获得上下文各utterance序列的最终语义表征。

    同样的对response文本也进行如上的计算。分别对两个层级的文本表示利用一个sigmoid函数表示其相似度,两者之和即为最终的相似度。

    5. InferSent

    本文探究在NLI语料上采用什么样的模型能够更好的实现文本pair在同一语义空间的映射,从而可以实现下游任务的迁移学习。文章总结了Siamese结构的统一架构:

    在这里插入图片描述

    模型在文本pair的文本向量基础上,进行了更细致的相似度计算,即将文本向量、文本向量的点乘结果、文本向量差的绝对值等进行拼接(该方案最早鉴于交互型文本匹配模型ESIM),再进行MLP+softmax分类。

    同时给出可用做表示层的各种特征抽取器:

    (1)LSTM and GRU:采用单向LSTM/GRU隐藏层在最后一个token位置的输出向量;

    (2)BiLSTM :采用双向LSTM/GRU隐藏层在各自最后一个token位置的输出的拼接向量;

    (3)BiLSTM with mean/max pooling:采用双向LSTM/GRU在各token位置隐藏层的输出拼接向量,然后取sequence length方向的max-pooling或者mean-pooling结果;

    (4)Self-attentive network:定义若干组可学习的文本query向量参数(可视为multiple view),然后将BiLSTM在各token的隐藏层输出作为key和value向量,然后基于attention机制得到整个文本在各query作用下加权平均后的语义向量,最后进行拼接得到最终的语义向量;

    (5)Hierarchical ConvNet:采用层次化的卷积层,即多层CNN+Max Pooling的迭加,每层中Max Pooling的输出作为文本语义向量的一种表征,最后将多层的向量进行拼接得到最终的语义向量;

    本文横向对比了上述各种特征抽取器,结果显示在所采用的语料基础上采用BiLSTM with mean/max pooling的结果更适合迁移学习。

    6. SSE

    SSE采用Stacked BiLSTM + Max Pooling作为文本向量抽取器,预测层采用了和SentInfer一样的组合策略。
    在这里插入图片描述

    7. 总结

    前文介绍了在IR、QA和NLI等领域提出的典型表示型文本匹配模型,其整体架构均满足Embedding->Encoding->Representation->Prediction的层级顺序,所做的工作集中在:

    (1)改进Encoding和Representation层,增强模型对文本向量的表达能力,可采用CNNs、RNNs、Pooling、Attention等机制,并在网络的深度以及网络各层信息的利用等层面进行尝试;

    (2)改进Prediction层对文本向量pair相似度的计算,比如可以选择简单的计算夹角余弦、欧式距离、核距离等,也可以对文本向量pair进行更花哨的向量和矩阵计算。

    【Reference】

    1. DSSM: Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
    2. CDSSM: A Latent Semantic Model with Convolutional-Pooling Structure for Information Retrieval
    3. LSTM-DSSM: Semantic Modelling with Long-Short-Term Memory for Information Retrieval
    4. MV-DSSM: A Multi-View Deep Learning Approach for Cross Domain
      User Modeling in Recommendation Systems
    5. ARC-1: Convolutional Neural Network Architectures for Matching Natural Language Sentences
    6. SiamCNN: Applying Deep Learning to Answer Selection: A Study and An Open Task
    7. SiamLSTM: Siamese Recurrent Architectures for Learning Sentence Similarity
    8. Multi-view: Multi-view Response Selection for Human-Computer Conversation
    9. InferSent: Supervised Learning of Universal Sentence Representations from Natural Language Inference Data
    10. SSE: Shortcut-Stacked Sentence Encoders for Multi-Domain Inference
    11. 文本匹配相关方向打卡点总结(数据,场景,论文,开源工具)
    12. 谈谈文本匹配和多轮检索
    13. 贝壳找房【深度语义匹配模型 】原理篇一:表示型
    展开全文
  • 来源:Licence:Unspecified作者:Tony3  功能齐全的文本输入检查器。... 4、已兼容中文输入法,并匹配最大长度; 5、已对复制粘贴来的文字进行了长度、输入字符检测。 小编注:感谢开发者@Tony3 。
  • 我们感兴趣的是为Python生成健壮的源代码嵌入,例如为书面文本创建单词嵌入。 您可以在Lab41 上了解我们对单词嵌入进行早期实验的源代码。 我们的源代码表示和相似度计算的主要用例是为编码人员提供有意义的代码...
  • 这是文本编辑器的源代码,该文本编辑器使用java制作,具有密码安全性,用于由编辑器创建和保存的文件。 主文件是QuickEdit.java,因此,如果要运行代码,请运行此文件以及所有其他文件的文件,这些文件包含一些操作...
  • 括号匹配java源代码

    2009-03-18 16:59:31
    括号匹配java源代码文本处理经常要用的小程序
  • 在visual studio 2010版及以上版本上编译,可生成.exe文件,将这个.exe文件和需要转换的源代码文件放到同一个目录中,打开.exe文件按照提示进行操作即可! 转载于:...

            基本的思想是,先检查当前目录下有多少种类型的源文件,比如.cpp,.c,.cc,.java等都属于不同类型的源文件,然后采用_finddata_t结构体表征不同类型的文件,通过_findfirst和_findnext函数一一进行匹配,直到全部找到为止。

            再分别打开这些文件,并打开同名的文件加上.txt后缀,将源文件读入到文本文件当中,至此完成。

    main.cpp

    #include "stdafx.h"
    #include "FileTran.h"
    #include "ListFile.h"
    #include<iostream>
    #include<windows.h>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	try{
    		FileTran fileTran;
    		ListFile listFile;
    		listFile.listFiles();
    		printf("listfile\n");
    		unsigned int num=listFile.getNum();
    		printf("num=%d\n",num);
    		unsigned int i=0;
    		while(i<num){
    			cout<<listFile.getFile(i)<<endl;
    			if(fileTran.openFile(listFile.getFile(i))){
    				fileTran.handleFile();
    				i++;
    				if(i==8)break;
    			}
    		}
    	} catch(...){
    		printf("something is wrong!\n");
    	}
    	std::cout<<"--------done"<<std::endl;
    	Sleep(2000);
    	return 0;
    }
    
    

    FileTran.cpp 

    #include "StdAfx.h"
    #include "FileTran.h"
    #include <cstdio>
    #include <string>
    #include<iostream>
    using std::ios_base;
    using std::string;
    using std::getline;
    
    FileTran::FileTran(void)
    {
    }
    
    
    FileTran::~FileTran(void)
    {
    	close();
    }
    
    bool FileTran::openFile(const char* filename)
    {
    	finFile.open(filename,ios_base::in|ios_base::binary);
    	if(!finFile.is_open()){
    		printf("can not open the file,please check it out!\n");
    		throw "open error";
    	}
    	else{
    		this->filename=filename;
    		printf("File opened\n");
    		return true;
    	}
    }
    
    void FileTran::close()
    {
    
    }
    
    void FileTran::handleFile()
    {
    	string tmpname=string(filename)+string(".txt");
    	if(finFile.is_open()){
    		foutFile.open(tmpname.c_str(),ios_base::out|ios_base::binary);
    		if(!foutFile.is_open()){
    			throw "something is wrong";
    		}
    	}
    
    	string str;
    
    	while(!finFile.eof()){
    		std::getline(finFile,str);
    		foutFile<<str<<std::endl;
    	}
    	finFile.close();
    	foutFile.close();
    }

     FileTran.h

    #ifndef _FILETRAN_
    #define _FILETRAN_
    #include<fstream>
    using std::ifstream;
    using std::ofstream;
    class FileTran
    {
    public:
    	FileTran(void);
    	~FileTran(void);
    public:
    	bool openFile(const char*);
    	void handleFile();
    private:
    	void close();
    private:
    	const char* filename;
    	ifstream finFile;
    	ofstream foutFile;
    };
    
    #endif //file tran
    
    

    ListFile.cpp 

    #include "StdAfx.h"
    #include "ListFile.h"
    #include<iostream>
    #include<fstream>
    #include<io.h>
    #include<windows.h>
    #include<tchar.h>
    
    ListFile::ListFile(void)
    {
    }
    
    
    ListFile::~ListFile(void)
    {
    }
    
    unsigned int ListFile::listFiles()
    {
    	unsigned int cnt=0;
    	char buf[SIZEFILE*2];
    	printf("Please enter all sorts of files you wanna transfer:");
    	while(EOF==scanf("%d",&kindsFiles)){
    		printf("enter is wrong!\n");
    	}
    	printf("Please enter the regulations of files,for example: \"*.c\" means all .c files would be listed!\n");
    	while(EOF!=scanf("%s",regs[cnt++])){
    		if(cnt==kindsFiles) break;
    	}
    	cnt=0;	
    	while(cnt!=kindsFiles){
    		struct _finddata_t files;
    		long handle=_findfirst(regs[cnt++],&files);
    
    		if(-1==handle){
    			printf("can not match the files!\n");
    			while(true);
    			exit(-1);
    		}
    		string tmp=string(files.name);
    		filesList.push_back(tmp);
    		while(!_findnext(handle,&files)){
    			tmp=string(files.name);
    			filesList.push_back(tmp);
    		}
    	}
    	nums=filesList.size();
    return nums;
    }
    
    
    void ListFile::disFiles()
    {
    	list<string>::iterator listPtr=filesList.begin();
    	for(int i=0;i<nums;i++,listPtr++){
    		strcpy(allFiles[i],listPtr->c_str());
    	}
    }
    
    char* ListFile::getFile(unsigned int n)
    {
    	disFiles();
    	return allFiles[n];
    }
    
    unsigned int ListFile::getNum()
    {
    	return nums;
    }
    
    

    ListFile.h 

    #ifndef _LISTFILE_
    #define _LISTFILE_
    #include<cstdio>
    #include<string>
    #include<list>
    #define SIZEFILE 80
    #define NUMFILE  80
    using std::string;
    using std::list;
    
    class ListFile
    {
    public:
    	ListFile(void);
    	~ListFile(void);
    private:
    	unsigned int kindsFiles;
    	char regs[NUMFILE][SIZEFILE];
    	list<string> filesList;
    	char allFiles[NUMFILE][SIZEFILE];
    	unsigned int nums;
    public:
    	unsigned int listFiles();
    	void disFiles();
    	char* getFile(unsigned int);
    	unsigned int getNum();
    };
    
    #endif //list file
    
    

    stdafx.cpp 

    #include "stdafx.h"

    stdafx.h

    
    #pragma once
    
    #include "targetver.h"
    
    #include <stdio.h>
    #include <tchar.h>
    
    

    targetver.h

    #pragma once
    
    // 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
    
    // 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
    // WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
    
    #include <SDKDDKVer.h>
    

     

    在visual studio 2010版及以上版本上编译,可生成.exe文件,将这个.exe文件和需要转换的源代码文件放到同一个目录中,打开.exe文件按照提示进行操作即可!

    转载于:https://my.oschina.net/u/2309100/blog/754290

    展开全文
  • 通常运用在自动人机交互、网络通讯、大文本搜索等需要对流数据进行处理的应用中,如交换机自动操作程序、终端的命令自动执行,适用于对无缓冲的流式数据进行实时响应的应用,也适用于在特大文本中进行正则匹配搜索而...
  • 网页源代码xpath解析

    千次阅读 2019-10-18 10:22:25
    网页源代码解析 xpath 解析 //元素标签名 例如: //div,查找网页内的所有div //元素标签名[@属性名=‘具体内容’] 例如: //div[@class=‘div1’],查找class为div1的div //元素标签名[第几个] 例如: //div...

    网页源代码解析

    xpath 解析

    1. //元素标签名

    例如: //div,查找网页内的所有div

    1. //元素标签名[@属性名=‘具体内容’]

    例如: //div[@class=‘div1’],查找class为div1的div

    1. //元素标签名[第几个]

    例如: //div[@class=‘box’][2],查找符合条件的第2个div

    1. //元素1/元素2/元素3…

    例如: //ul/li/div/a/img,查找ul下的li下的div下的a下的img标签

    1. //元素1/@属性名

    例如://ul/li/div/a/img/@src, 查找ul下的li下的div下的a下的img标签的src属性

    1. //元素/text()

    例如://a/text(), 获取a标签之间的文本(一级文本)

    1. //元素//text()

    例如://div[@class=‘box’]//text(), 获取class为div下的所有文本

    1. //元素[contains(@属性名,‘相关属性值’)]

    例如://div[contains(@class,‘zhangsan’)] 查找class中包含zhangsan的div

    1. //*[@属性=‘值’]

    * 可表示任意标签名
    属性可以是任意
    例如://*[@name=‘lisi’]查找所有name为lisi的元素

    1. 逻辑运算定位。and 或 or

    通过and来缩小过滤的范围,只有条件都符合时才能定位到
    //div[@name=‘city’ and @size=‘4’ and @multiple=“multiple”]
    or就相反了,只要这些筛选中,条件满足一个就能匹配到了
    //div[@name=‘city’ or @size=‘4’ or @multiple=“multiple”]

    1. starts-with / ends-with

    解析:匹配以 ctrl开始的属性值
    input[starts-with(@id,‘ctrl’)]
    解析:匹配以 userName 结尾的属性值
    input[ends-with(@id,’_userName’)]

    1. last()

    选取属于 div 子元素的最后一个 p 元素
    //div/p[last()]
    选取属于 div 子元素的倒数第二个 p 元素
    //div/p[last()-1]

    1. position()

    选取最前面的两个属于 div 元素的子元素的 p 元素
    /div/p[position() < 3]

    表达式描述
    /从根节点选取
    //从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    .选取当前节点。
    . .选取当前节点的父节点
    //div[@lang]选取所有拥有名为 lang 的属性的 div 元素
    //div/p[price>35.00]选取 div 元素的所有 p 元素,且其中的 price 元素的值须大于 35.00。
    //a[text()=‘下一页’]匹配内容为下一页的a标签
    /bookstore/*选取 bookstore 元素的所有子元素。
    1. 节点轴选择
    # -*- coding:utf-8 -*-
    from lxml import etree
    
    
    text = """
    <div>
    <ul>
    <li class="item-0" name="name-0"><a href="link1.html"><span>first item</span></a></li>
    <li class="item-1" name="name-1"><a href="link1.html">second item</a></li>
    <li class="item-inactive" name="name-2"><a href="link3.html">third item</a></li>
    <li class="item-1" name="name-3"><a href="link4.html">fourth item</a></li>
    <li class="item-0" name="name-4"><a href="link5.html">fifth item</a></li>
    </ul>
    </div>
    """
    html = etree.HTML(text)
    result = html.xpath("//li[1]/ancestor::*")
    print("1", result)
    result = html.xpath("//li[1]/ancestor::div")
    print("2", result)
    result = html.xpath("//li[1]/attribute::*")
    print("3", result)
    result = html.xpath("//li[1]/attribute::class")
    print("4", result)
    result = html.xpath("//li[1]/child::*")
    print("5", result)
    result = html.xpath("//li[1]/child::a[@href='link1.html']")
    print("6", result)
    result = html.xpath("//li[1]/descendant::*")
    print("7", result)
    result = html.xpath("//li[1]/descendant::span")
    print("8", result)
    result = html.xpath("//li[1]/following::*")
    print("9", result)
    result = html.xpath("//li[1]/following::*[2]")
    print("10", result)
    result = html.xpath("//li[1]/following-sibling::*")
    print("11", result)
    result = html.xpath("//li[1]/following-sibling::*[2]")
    print("12", result)
    
    • ancestor轴,可以获取所有祖先节点,其后需要跟两个冒号,然后是节点选择器,使用* ,表示匹配所有节点;
    • attribute轴,可以获取属性值,使用*,代表获取节点的所有属性;
    • child轴,可以获取子节点,使用*,代表获取所有子节点;
    • descendant轴,获取所有子孙节点;
    • following轴,获取当前节点之后的所有节点,若添加索引选择,只获取对应节点;
    • following-sibling轴,获取当前节点之后的所有同级节点,若添加索引选择,只获取对应节点。

    css解析

    展开全文
  • 这个Matlab程序,可以读取任何文本文件,并返回一个内容的数组。它在执行过程中,对每个字符串进行匹配,每行作为一次匹配的结束。
  • C语言实例解析精粹(第二版) 电子书及源代码 附清晰版电子书及源代码 第一部分 基础篇 实例1 第一个C程序 实例2 运行多个源文件 实例3 求整数之积 实例4 比较实数大小 实例5 字符的输出 实例6 显示变量所占...
  • 这是本人在学习MFC过程中开发的一个小程序,是Windows平台下,一款小巧的程序语言源代码编辑器。支持语法高亮显示、代码折叠、括号匹配、自动换行、行数标记、搜索替换、缩放字体、设置语法高亮规则,它可以同时编辑...
  • 源代码与原始版本不同 二、参考 1、当前不会命中断点,源代码与原始版本不同,解决办法 三、操作 1、(失败):属性里面重生生成 2、(有时候有效):在代码里面ctrl+a 然后ctrl+k然后ctrl+s:让整个代码自动格式化...
  • 对于任一给定的单词,在该文本中找寻匹配的字符串,输出结果 Information security means protecting information and information systems from unauthorized access, use, disclosure, disruption, ...
  • 本文介绍:开发爬虫的一些基本的准备以及利用requests库获取网页源代码;接着介绍如何使用正则表达式处理爬取到的源代码信息。最后展示一个实例:利用正则表达式,爬取小说《斗破苍穹》 ...
  • 注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。 java测试代码: /** ...
  • 源代码以及进行新构建所需的所有依赖关系都保存在。 介绍 Notepas是用Lazarus编写的一种快速可移植的本机多平台文本编辑器,可以使用高级本机Free Pascal编译器针对多个平台和小部件集进行编译。 针对开发人员,它...
  • ASP.NET精品课程+源代码

    千次下载 热门讨论 2009-01-05 20:15:51
    涵盖了代码规范、运行模型、服务控件、验证控件、数据绑定技术、ADO.NET技术、数据库技术、文件操作等内容。 所列出的内容均是ASP.NET开发网站等应用的必备知识。我们在实训课题引入的前提下,通过一系列完整的案例...
  • 查看一个网页的代码一般如下: 右键: 此题右键无效,CTRL+U 哭了哭了 第一次提交框框错误 第二次提交cy....8e}终于成功 第二题: Robots 搜索引擎使用spider程序自动访问互联网上的网页并...
  • 包含朴素贝叶斯算法的简单实现 还有所需要的jar包:je-analysis-1.5.3.jar、lucene-core-2.3.2.jar 第二个jar包还可以查看到源码
  • 大型软件系统的缺陷定位通常采用源代码与缺陷报告的文本相似性的排序方法,但是这种基于文本相似性的方法没能充分利用源代码结构信息,缺陷定位的准确率低。为了解决这个问题,提出了一种基于源代码结构(如类名、...
  • 一、为什么要阅读源代码?很多作家成名之前都阅读过大量的优秀文学作品,经过长期的阅读和写作积累,慢慢的才有可能写出一些好的、甚至是优秀的文学作品。 而程序员与此类似,很多程序员也需要阅读大量的优秀程序或...
  • 源代码与原始版本不同. 为什么会出现呢? 原因当前大家都清楚,就是因为编译器生成的符号文件与源代码不同. 那我的代码明明已经改变并存档,并且编译了,为什么还是不同呢? 1.我想也许是没有被真正的重新生成吧, 这...
  • 已经完成了所有耗时的编程工作,因此您... 无论您是已经要构建游戏概念,还是想通过有趣的方式来学习有关制作手机游戏的更多信息,请立即下载源代码。 1. 《 Indiara and Skull Gold》是一款具有印第安纳·琼...
  • 本文针对图像特征匹配算法—SIFT算法介绍了其算法原理,并贴出了代码
  • c++阅读源代码方法

    千次阅读 2015-08-03 10:53:06
    1.阅读源代码对于程序员来说是提高技术实力和业务知识最好的方法,那么我们怎样阅读源代码就是我们 首先要解决的问题。 阅读源代码就像管理一家大的公司,关键在于管理者卓越的领导意识。作为阅读源代码的人也...
  • 去除Html中的干扰码等(样例中以轻之国度的干扰码为例) 配置文件语法: 方法类型(整数) 最大匹配长度(整数) 字符串1(删除开头) 字符串2(删除结尾) 方法类型: 1:删除单行 2:删除行与行之间的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 143,380
精华内容 57,352
关键字:

文本匹配源代码