精华内容
下载资源
问答
  • 32|字符串匹配基础上如何借助哈希算法实现高效字符串匹配 从今天开始我们来学习字符串匹配算法字符串匹配这样一个功能我想对于任何一个开发工程师来说应该都不会陌生我们用最多就是编程语言提供 Java indexOf) ...
  • python从字符串中提取数字

    万次阅读 多人点赞 2018-05-14 14:43:16
    ## ^ 匹配字符串的开始。 ## $ 匹配字符串的结尾。 ## \b 匹配一个单词的边界。 ## \d 匹配任意数字。 ## \D 匹配任意非数字字符。 ## x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符)。 ## x* ...

    1、使用正则表达式,用法如下:

    ## 总结
    ## ^ 匹配字符串的开始。
    ## $ 匹配字符串的结尾。
    ## \b 匹配一个单词的边界。
    ## \d 匹配任意数字。
    ## \D 匹配任意非数字字符。
    ## x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符)。
    ## x* 匹配0次或者多次 x 字符。
    ## x+ 匹配1次或者多次 x 字符。
    ## x{n,m} 匹配 x 字符,至少 n 次,至多 m 次。
    ## (a|b|c) 要么匹配 a,要么匹配 b,要么匹配 c。
    ## (x) 一般情况下表示一个记忆组 (remembered group)。你可以利用 re.search 函数返回对象的 groups() 函数获取它的值。
    ## 正则表达式中的点号通常意味着 “匹配任意单字符”
    

    2、解题思路:

    • 既然是提取数字,那么数字的形式一般是:整数,小数,整数加小数;

    • 所以一般是形如:----.-----;

    • 根据上述正则表达式的含义,可写出如下的表达式:"\d+.?\d*";

      • \d+ 匹配1次或者多次数字,注意这里不要写成*,因为即便是小数,小数点之前也得有一个数字;
      • \.? 这个是匹配小数点的,可能有,也可能没有;
      • \d* 这个是匹配小数点之后的数字的,所以是0个或者多个;

    3、代码如下:

    # -*- coding: cp936 -*-
    import re
     
    string="A1.45,b5,6.45,8.82"
    print re.findall(r"\d+\.?\d*",string)
     
    # ['1.45', '5', '6.45', '8.82']
    
    展开全文
  • python RE模块 匹配字符串

    千次阅读 2019-07-18 22:40:48
    一:匹配字符串 使用re模块,首先需要导入re模块 import re 匹配字符串这个模块我就介绍几三个方法, match()函数 search()函数 findall()函数。接下来我分别来介绍和示例 1:match()函数 概括:match()方法用于从...

    一:匹配字符串

    使用re模块,首先需要导入re模块

    import re
    

    匹配字符串这个模块我就介绍几三个方法,
    match()函数 search()函数 findall()函数。接下来我分别来介绍和示例

    1:match()函数

    概括:match()方法用于从字符串开始处进行匹配,如果在开始的位置匹配成功则返回match对象,如活匹配失败则返回None
    语法:re.match(pattern,string,[flags])
    参数说明:

    • pattern 表示模式字符串,由要匹配的正则表达式转化而来。
    • string 表示要匹配的字符串。
    • flags 可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小。常用的标志如下图所示。
    标志 说明
    A或者ASCLL 对于\w\W\b\B\d\D\s和\S只进行ASCLL匹配
    I或者IGNORECASE 执行不区分字母大小的匹配
    M或者MULTILINE 将^和$用于包括整个字符串的开始和结束的没一行
    S或者DOTALL 使用(.)字符串匹配所有字符,包括换行符
    X或者VERBOSE 忽略模式字符串中的未转义的空格和注释

    例子:匹配字符串是否已"mr_"开头的,不区分大小写

    pattern = r'mr_\w+'  # 模式字符串
    string = 'MR_SHOP mr_shop'  #要匹配的字符串
    match = re.match(pattern,string,re.I)   # 匹配字符串不区分大小
    print match
    string1 = '项目名称MR_SHOP mr_shop'
    match1 = re.match(pattern,string,re.I)   # 匹配字符串不区分大小
    print match1
    # <_sre.SRE_Match object at 0x0000000002BDA510>
    # <_sre.SRE_Match object at 0x00000000030A36B0>
    

    2:search()函数

    概括:search()方法用于搜索整个字符串中搜索第一个匹配的值,如果匹配成功则返回macth对象,否则返回None
    语法:re.search(pattern,string,[flags])
    参数说明:

    • pattern 表示模式字符串,由要匹配的正则表达式转化而来。
    • string 表示要匹配的字符串。
    • flags 可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小。常用的标志和match()模块是一个表。

    代码示例:

    pattern = r'mr_\w+'  # 模式字符串
    string = 'MR_SHOP mr_shop'  #要匹配的字符串
    match = re.search(pattern,string,re.I)   # 匹配字符串不区分大小
    print match
    string1 = '项目名称MR_SHOP mr_shop'
    match1 = re.search(pattern,string,re.I)   # 匹配字符串不区分大小
    print match1
    <_sre.SRE_Match object at 0x0000000002DAA510>
    <_sre.SRE_Match object at 0x00000000032F36B0>
    

    和上面的match()各人感觉没什么区别

    3:findall()函数

    概括:使用findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并且以列表的形式返回,如果匹配成功则返回包含匹配结构的列表否则返回空列表。本人在开发时用的这个函数是比较多的。
    语法:re.findall(pattern,string,[flags])
    参数说明:

    • pattern 表示模式字符串,由要匹配的正则表达式转化而来。
    • string 表示要匹配的字符串。
    • flags 可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小。常用的标志和match()模块是一个表。
      直接上代码吧:
    pattern = r'mr_\w+'  # 模式字符串
    string = 'MR_SHOP mr_shop'  #要匹配的字符串
    match = re.findall(pattern,string,re.I)   # 匹配字符串不区分大小
    print match
    string1 = '项目名称MR_SHOP mr_shop'
    match1 = re.findall(pattern,string)   # 匹配字符串区分大小
    print match1
    # ['MR_SHOP', 'mr_shop']
    # ['MR_SHOP', 'mr_shop']
    

    在来一个简单的例子。

    pattern = r'[1-9]{1,3}(\.[0-9]{1,3}){3}'  # 模式字符串
    str1 = '127.0.0.1 192.168.1.66'
    match = re.findall(pattern,str1)
    print match
    # ['.1', '.66']
    
    pattern = r'([1-9]{1,3}(\.[0-9]{1,3}){3})'  # 模式字符串
    str1 = '127.0.0.1 192.168.1.66'
    match = re.findall(pattern,str1)
    for i in match:
    	print i[0]
    # 127.0.0.1
    # 192.168.1.66
    

    这里就可以直接拿到IP地址了。
    我是阿旺,表格也是纯手打,还不是很熟练,但是我会慢慢的去练习的。原本认为自己做不到的事最后却做成了,感觉真的很好!明天更新替换字符串

    展开全文
  • 首先,我们要知道,我们利用CString类可以对字符串...其中,Left(int nNumber)函数是截取字符串的左侧的nNumber个字符,如果遇到汉字,则需要进一步判断,例如算出每个汉字要有多少个字符。CString strTest = _T("F:\\

    首先,我们要知道,我们利用CString类可以对字符串进行一系列操作,如查找,选择等,主要有Left(),Mid(),Right(),Find(),ReverseFind(),FindOneOf()。

    其中,Left(int nNumber)函数是截取字符串的左侧的nNumber个字符,如果遇到汉字,则需要进一步判断,例如算出每个汉字要有多少个字符。

    CString strTest = _T("F:\\MyWork\\Test\\0-1.bmp");
    CString strGet = strTest.Left(3);//strGet = F:\\
    //注意这里的\\表示的是一个字符,因为单独的\是转义字符,是不算在里面的

    这里需要注意的是,截取左侧的你Number个字符,则nNumber个字符,应该是从1开始,则表示截取左侧的一个字符,2则表示两个,0代表0个就是没意义的意思。

    Mid(int nFirst)表示从nFirst开始,知道字符串结束,注意,这里的是nFirst表示的是从第几个开始,其形式和一维数组类似,第一位表示法是0

    CString strTest = _T("Serious_Tanx");
    CString strGet = strTest.Mid(0);//strGet=Serious_Tanx

    Mid(int nFirst, int nNumber则表示的是从第nFirst开始,截取nNumber个字符,注意这里的nFirst和nNumber不要弄混淆了,nFirst计算位数时从0开始,而nNumber则要从1开始,表示截取几位(这样也可以理解,不能截取0位,截取0位则表示什么也不截取)。

    CString strTest = _T("Serious_Tanx");
    CString strGet1 = strTest.Mid(0,1);//strGet1=S
    CString strGet2 = strTest.Mid(2,3);//strGet2=rio

    这样,有了上面的两个概念,我们再理解Right()就不难理解了。
    Right(int nNumber)是表示从字符串的右面开始,截取nNumber个字符。

    CString strTest = _T("Serious_Tanx");
    CString strGet = strTest.Right(1);//strGet=x

    总结,对于Left(),Mid(),Right()来讲,当截取多长的字符时,是表示截取1位到字符串的长度。当表示从第几位开始时,则表示法则和数组的第几位一样的。即多长是从1开始,第几则表示从0开始。

    当我们理解了上面的这句话之后,对于Find(),FIndOneOf()和ReverseFind()就不难进行理解了。

    Find()表示的从坐侧第0位(即第一个字符开始),查找第一个出现的字符的位置,返回的一个int值,表示第几位(第几位,按照我们上面所述,就明白是从第0位开始)。

    CString strTest = _T("Serious_Tanx");
    int nGet = strTest.Find('i');//nGet=3

    FindOneOf()则表示给定的字符串,然后从待查找的字符串中查找出给定的字符串中第一个字符串在待查找的字符串的位置。这么说有点乱,即是从两个字符串中进行查找。

    CString strTest = _T("Serious_Tanx");
    int nGet = strTest.FindOneOf("zzi");//nGet=3
    //即zzi中的z在Serious_Tanx没有体现,而进行下一个的查找,到i的时候查找到的位置是3

    ReverseFind()是从待查找的字符串的右侧开始查找想要查找的字符的位置。注意的是,是反向查找第一个出现字符的位置,但是,这个位置是从左面第一个开始计算的。在好多的博客中,例如天缘博客中,这个例子举的就是错误的。一定是从左面开始计算第几个位置的。

    CString strTest = _T("Serious_Tanx");
    int nGet = strTest.ReverseFind('i');//nGet=3
    int nGet = strTest.ReverseFind('S');//nGet=0
    int nGet = strTest.ReverseFind('x');//nGet=11
    

    好了,以上就是CString的各种操作,我们可以从这个操作中,进行一系列的深入操作处理,比如,匹配字符串和查找某个特定的字符串然后进行添加操作。

    在我们日常工作中,对字符串进行最多的操作,一般就是上面的两个,一个是对字符串的匹配,另一个就是在字符串的中间或者末尾进行添加操作,而在末尾中进行添加工作,这个不用我们多说,这个比较简单。我们重点书前两个。

    比如说,我们通过CFileFind()查找到一系列的图片的路径名,我们假设这里有两个路径,名字分别为:F:\MyWork\Test\0-1.bmp,F:\MyWork\Test\0-2.bmp,F:\MyWork\Test\1-1.bmp,F:\MyWork\Test\1-2.bmp
    现在,我们想在这四个字符串中查找到0-2这幅图片,当然,我们可以通过一步查找就能实现。然后,我们再在这0-2的图片后面加上-get,表示我们得到了这幅图片。即最后的图片的路径名变为F:\MyWork\Test\0-2-get.bmp

    //这里是简略的写,假设我们通过这步得到上面所述的四个路径
    CFileFind ff;
    CString strPathName[4] = ff.GetFilePath();
    CString strHeader,strFolder,strMatch,strSavePath;
    CString strTemp = _T("0-2");
    
    int pos1.po2;
    for(int i=0; i<4; i++)
    {
        pos1 = strPathName[i].ReverseFind('\\');//注意这里要有\\,单一\表示转义
        pos2 = strPathName[i].ReverseFind('.');
        //pos1=14,pos2=18    
        //0-2在里面的表示应该是Mid(15,3),注意转换。然后strMatch=0-2
        strMatch = strPathName[i].Mid(pos1+1, pos2-pos1-1);  
        if(strTemp == strMatch)
        {
            //strHeader=F:\\MyWork\\Test\\
            strHeader = strPathName[i].Left(pos1-1);
            //strFolder=.bmp
            strFolder = strPathName[i].Mid(pos2);
            //strSavePath=F:\\MyWork\\Test\\0-2-get.bmp
            strSavePath = strHeader + strMatch + _T("-get") + strFolder;
        }  
    }

    以上就是一个简单的字符串匹配和在字符串的中间添加字符串。

    我们要明白的是,要想字符串匹配,最好知道待匹配的字符串的信息,然后根据信息来进行匹配,效果是最好的。

    参考资料:http://www.metsky.com/archives/155.html
    注:这个作者关于ReverseFind()部分的代码是错误的,我在文中已经进行的指出并且改正。

    展开全文
  • js正则匹配以某字符串开始字符串

    千次阅读 2018-03-30 16:04:00
    let decode_sql ="select * from table where create_user='user' order by id desc"; decode_sql.match(/^SELECT.*/gi) ...以某个字符串开始 是用正则 ^ 中间所以字符 可以用 .* . 表示...
    let decode_sql ="select * from table where create_user='user' order by id desc";
     
    decode_sql.match(/^SELECT.*/gi)
    decode_sql.match(/^INSERT.*/gi)
     
    以某个字符串开始  是用正则的 ^
    中间的所以字符 可以用 .*      
    .  表示任意字符
    *  表示0次到多次匹配
    i 表示忽略大小写

    转载于:https://www.cnblogs.com/zhaomeizi/p/8676750.html

    展开全文
  • 今天在整理MvvmCross(c# mvvm跨平台框架)文档做epub电子书时,遇到到了文字显示不太好,需要去掉指定开头的字符串。 然后写了下面这个正则表达式 正则表达式 可以匹配下面高亮这段文本 ; margin: 24px 0px 16px; ...
  • 字符串匹配

    2008-12-24 15:42:00
    首先,让我们看看两个特别的字符:’^’ 和 ‘$’ 他们是分别用来匹配字符串的开始和结束,一下分别举例说明: "^The": 匹配以 "The"开头的字符串; "of despair$": 匹配以 "of despair" 结尾的字符串; "^abc$": 匹配...
  • ^ 匹配字符串的开头 Demo #!/usr/bin/python3 import re s = 'This module provides regular expression matching operations similar to those found in Perl' pat = r'^[emrt]' # 查找以字符e,m,r或t开始的字符串 ...
  • js正则匹配字符串

    千次阅读 2018-08-30 09:22:26
    1. str.search(regexp):search()方法不支持全局搜索,因为会忽略正则表达式参数的标识g,并且也忽略了regexp的lastIndex属性,总是从字符串的开始位置进行检索,所以它会总是返回str的第一个匹配的位置。...
  • 别再暴力匹配字符串了,高效KMP才是真香!

    千次阅读 多人点赞 2020-05-11 09:51:56
    字符串匹配是我们在编程中常见问题,其中从一个字符串(主串)中检测出另一个字符串(模式串)是一个非常经典问题,当提及到这个问题时我们首先想到算法可能就是暴力匹配,下面动图就展示了暴力匹配的流程。...
  • 正则匹配以某字符串开始的整行

    万次阅读 2016-03-15 18:52:26
    如下,匹配以“http”开头整行字符串 ^http.*$
  • a.*?b就是a开始b结束的匹配 如果要限制是一行开头和末尾话,就是^a.*?b$ 下图为sublime中使用该正则进行匹配替换效果:
  • 【SQL查询】正则表达式匹配字符串

    千次阅读 2019-09-27 23:56:01
    匹配输入字符串的开始位置。 $ 匹配输入字符串的结尾位置。 * 匹配前面的字符零次或多次。 + 匹配前面的字符一次或多次。 ? 匹配前面的字符零次或一次。 . 匹配任何字符,除了空. ...
  • 2.1 查找字符串childStr在字符串fatherStr中出现次数及开始位置,lettersToLower设置为0时区分大小写,设置为非0时不区分大小写 2.2 返回值为一个字典: { ‘childStr_original’: ‘abcabc’, (用来匹配的原始...
  • 在有些时候,会面对海量的字符串匹配某个字符串的问题,使用不同的方法其所消耗的时间也是不同的。   我是在提取PE文件中的字符串时,也遇到了这个问题。因为要去计算PE文件里字符串的贡献值,需要反复的查找某个...
  • 给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含起始位置。 如下面两个字符串: char *str = “abcababcabc”; char *ptr = “abcbac”; str有一处包含ptr 在str下标5处开始...
  • BF算法匹配字符串

    2017-01-02 16:45:25
    子串和模式挨个比较,比较到不相同,又将模式开始比较+1位置和子串相比,遇到不同照做,直到和模式相比后子串比较到了末尾与子串长度相同了,说明匹配到了。 代码: #include #include //BF法求...
  • 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现第一个位置 (从0开始)。如果不存在,则返回 -1。 示例 1: 输入: haystack = “hello”, needle = “ll” 输出: 2 示例...
  • 本题要求实现一个函数,对给定一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间所有字符。 函数接口定义: char *match( char *s, char ch1, char ch2 ); ...
  • 字符串正则匹配

    2020-05-20 17:05:05
    题目描述 读入数据string[ ],然后读入一个短...=1000),从第二行开始输入n个字符串(不含空格),接下来输入一个匹配字符串。 输出描述: 输出匹配到的字符串的行号和该字符串(匹配时不区分大小写)。 示例1 输入 4

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,075
精华内容 4,430
关键字:

匹配字符串的开始