精华内容
下载资源
问答
  • 2019-02-27 15:52:27

    问题描述:

    • 通配符匹配通配符 ?   表示可以替换一个任意字符
    • 通配符 *   表示可以替换一个 长度任意的字符串 或者替换空

    a*b?  可以匹配: acdbfdbf  abc      现给定通配字符串s1    判断s2 是否满足匹配

    思路:采用动态规划 dp[i][j]表示S1前i长度部分与S2前j部分是否匹配

    对于dp[i][j]

    • ——s1[i]为*表示,该处可以为任意字符串  那么dp[i-1][j]=true 或者  dp[i][j-1]=true都可以使得 dp[i][j]=true匹配上
    • ——s1[i]为?表示,该处可以为一个字符串,该问题化归为判断之前的dp[i-1][j-1]=true 是否匹配 因为?可以通配s2[j]
    • ——s1[i]为普通字符,那么问题化归为判断之前的dp[i-1][j-1] 以及s1[i]==s2[j]是否匹配
    bool m[100][100];
    //dp数组 m[i][j]记录s1的前i段与s2的前j段是否匹配
    //显然问题所求为m[s1.length][s2.length]
    char s1[100];
    char s2[100];
    void fun()
    {
    	m[0][0] = 1;
    	//遍历
    	for(int i=1;i<=str1.length();i++)
    		for (int j = 1; j <=str2.length(); j++)
    		{
    			if (s1[i] == '*')  //如果在i位置遇到通配符 *
    			{
                   //若*出现在s1第一个位置   那么 m[1][0]=1  即 * 代表空
    				if (i == 1)    
    					m[1][0] = 1;
    				m[i][j] = m[i - 1][j] | m[i][j - 1];  
    		
    			}
    			else if (s1[i] == '?')  //如果在i位置遇到通配符 ?
    				m[i][j] = m[i - 1][j - 1];
    
    			else                
    				m[i][j] = (m[i - 1][j - 1]) && (s1[i] == s2[j]);
    		}
    	
    	//时间复杂度: O(L1*L2)	
    	//循环结束   所求即为 m[L1][L2]	
    	cout << m[str1.length()][str2.length()] << endl;
    	
    }


     

    更多相关内容
  • Python 正则表达式匹配任意字符(包括换行符)的写法
  • 1.linux通配符*:代表所有字符(0到多个);?:代表一个字符;;:连续不同命令之间的分隔符;#:配置文件注释;|:管道;~:当前用户的家目录;-:上一次所在的路径;$:变量前面需要加的符号;/:路径分隔符;>或1>:重定向,会覆盖原有...

    1.linux通配符

    *:代表所有字符(0到多个);

    ?:代表一个字符;

    ;:连续不同命令之间的分隔符;

    #:配置文件注释;

    |:管道;

    ~:当前用户的家目录;

    -:上一次所在的路径;

    $:变量前面需要加的符号;

    /:路径分隔符;

    >或1>:重定向,会覆盖原有数据;

    >>:追加重定向;

    <:输入重定向(xargs、tr);

    <<:追加输入重定向(cat);

    ':单引号,不具有命令置换功能,输出时所见即所得;

    ":双引号,具有变量置换功能,解析变量后才输出.不加引号相当于双引号;

    `:反引号,两个``中间为命令,会先执行,等价于$();

    {}:命令区块组合或内容序列,echo stu{1..5};cp a.txt {,.bak};

    !:逻辑运算中的非(not);

    &&:and并且,前一个命令执行成功时,才执行后一个命令;

    ||:or或,前一个命令执行失败时,执行后一个命令;

    .:当前目录;

    ..:上一级目录;

    2.正则表达式:为处理大量字符串而定义的一套规则和方法

    a.基础正则第一波:

    # 匹配以m开头的字符,因为是贪婪模式,所以匹配到整行

    grep "^m" oldboy.txt

    # 匹配以m结尾的字符

    grep "m$" oldboy.txt

    # 匹配空行并显示行号

    grep -n "^$" oldboy.txt

    # 排除空行

    grep -vn "^$" oldboy.txt

    # 只输出匹配到的m字符

    grep -no "m" oldboy.txt

    .:代表且只能代表任意一个字符;

    *:重复0个或多个前面的一个字符,例如:my*,0个y,会匹配有m字符的字符串;1个y,my;多个y,myyy;

    \:转义,让有特殊意义的字符,只代表字符本身;

    .*:匹配任意长度的任意字符.

    b.基础正则第二波:

    grep -no [abc] oldboy.txt 匹配集合内的任意一个字符

    grep -no [^abc] oldboy.txt 不匹配集合内的字符

    a\{n,m\} 前一个字符,重复n到m次

    a\{n,\} 重复至少n次

    a\{n\} 重复n次

    a\{,m\} 最多重复m次

    # -w参数是按单词搜索,只匹配有这个单词的行

    grep -w "oldboy" oldboy.txt

    # grep -E 不用再加转义符\,egrep、sed -r是同样的道理--支持扩展正则

    # -i、-v为常用参数、-o(用于统计出现在文中的次数)

    c.通配符和正则表达式比较:

    通配符多用在文件上,比如find、ls、cp等;正则表达式多用于文本过滤,比如grep、awk、sed等;

    *在通配符中表示匹配任意的0个或多个字符;在正则表达式中是重复之前的一个或者多个字符,不能独立使用.

    3.python去重的几种方法:

    >>> lst1 = [2, 1, 3, 4, 1]

    >>> lst2 = list(set(lst1))

    >>> print(lst2)

    [1, 2, 3, 4]

    二、常规方法

    >>> lst1 = [2, 1, 3, 4, 1]

    >>> temp = []

    >>> for item in lst1:

    if not item in temp:

    temp.append(item)

    >>> print(temp)

    [2, 1, 3, 4]

    三、列表推导

    >>> lst1 = [2, 1, 3, 4, 1]

    >>> temp = []

    >>> [temp.append(i) for i in lst1 if not i in temp]

    [None, None, None, None]

    >>> print(temp)

    [2, 1, 3, 4]

    >>> data = [2, 1, 3, 4, 1]

    >>> [item for item in data if data.count(item) == 1]

    [2, 3, 4]

    四、sort、sorted

    >>> lst1 = [2, 1, 3, 4, 1]

    >>> lst2.sort(key=lst1.index)

    >>> lst2 = sorted(set(lst1), key=lst1.index)

    个人觉得第一种和第三种方法比较好理解

    sort与sorted区别:

    sort 是应用在list上的方法,sorted 可以对所有可迭代的对象进行排序操作.list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作.

    通过指定列表中的元素进行排序:

    >>> random = [(2, 2), (3, 4), (4, 1), (1, 3)]

    >>> random.sort(key=lambda s:s[1])

    >>> print(random)

    [(4, 1), (2, 2), (1, 3), (3, 4)]

    sorted的使用方法:

    >>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

    # 按年龄降序排序

    >>> sorted(students, key=lambda s: s[2], reverse=True)

    [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

    展开全文
  • 提出了一个更普遍的问题, 带任意长度通配符的模式匹配问题(Pattern matching with arbitrary-length wildcards, PMAW), 这里模式中不仅可以有多个通配符约束, 而且每个通配符的约束可以是两个整数, 也可 ...
  • 计算机excel通配符

    2021-07-23 04:15:49
    ”“*”“~”可以代表任意或一定范围的字符。在Excel中,利用通配符不仅可以进行模糊查询替换,而且还可以通过与函数的配合进行模糊计算。用通配符进行查询替换实例描述:在作品登记表中,有作者的名字中某个字出现...

    计算机excel通配符

    通配符“?”“*”“~”可以代表任意或一定范围的字符。在Excel中,利用通配符不仅可以进行模糊查询替换,而且还可以通过与函数的配合进行模糊计算。

    用通配符进行查询替换

    实例描述:在作品登记表中,有作者的名字中某个字出现了同音不同字的现象,要求都改成正确的名字(图1)。

    我们分析一下,这个表中作者“马震安”中的第二个字分别出现了“震”、“振”、“镇”三种情况,要改成正确的“马震安”,如果一个一个地改,数量少了还不费事,但是要改的数量多了,那还是很让人头疼的。这时,我们可以利用通配符来对作者进行查询替换。利用组合键Ctrl+F调出“查找和替换”对话框,选择“替换”标签,在“查找内容”出输入“马?安”(注意是英文半角的“?”),在“替换为”处输入正确的“马震安”,最后点击“全部替换”按钮,这时就会把表中作者是“马震安”、“马振安”、“马镇安”的,都替换成“马震安”(图2)。

    小提示:在Excel中通配符有3个,分别为?(问号)、*(星号)、~(波形符)。其中,?(问号)可代表任意单个字符;*(星号)可代表任意数量的字符;~(波形符)后可跟 ?、* 或 ~ 问号、星号或波形符,例如,“fy06~?”可找到“fy06?”

    可见,有了通配符的帮助,在Excel中可进行更大范围的查询替换,在日常办公中还是非常有用的'。

    通配符在计算中的应用

    实例描述:某商场要对一星期内的各个品牌的电动车销售情况进行统计。这家商场的电动车主要有捷安特、彪牌、追风鸟、雅迪等这4个品牌,要求对一个星期的流水账按这4大品牌进行分类统计。

    我们分析一下,如果我们按通常的做法对数据进行分类汇总,然后再把得到的结果填到相应的单元格中,但当我们按商品进行分类时,这些品牌都有两种型号,这一个品牌的两种型号就分成了两类,这显然是不行的。有没有什么方法一次性地来对这些品牌的销售进行统计呢?

    这时,我们可以利用SUMIF函数对数据进行统计。因为SUMIF函数中允许使用通配符,所以就能够很好地解决分类问题。我们可以在F4单元格中输入“=SUMIF($B$2:$B$25,E4&"*",$C$2:$C$25)”,然后拖动填充柄将公式填充到F7单元格即可(图3)。

    SUMIF函数的作用是按给定条件对指定单元格求和。其语法为SUMIF(range,criteria,sum_range)。

    range 是要根据条件查找的单元格区域。即公式中的$B$2:$B$25

    Criteria 为确定对哪些单元格相加的条件,其形式可以为数字、表达式或文本。例如,条件可以表示为 32、"32"、">32" 或 "apples"。公式中的E4&"*",其中用到了&符号,它表示相连接,也就是把E4单元格的值与通配符“*”相连接,得到“捷安特*”。

    Sum_range 为要相加的实际单元格(如果区域内的相关单元格符合条件)。如果省略 sum_range,则当区域中的单元格符合条件时,它们既按条件计算,也执行相加。

    整个公式就表示在B2:B25查找品牌是“捷安特”的商品,找到后计算它们的总销量。

    【计算机excel通配符】相关文章:

    展开全文
  • 字符通配符

    2021-12-07 14:21:48
    字符通配符 描述 问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符通配符的算法。 要求: 实现如下2个通配符: * :匹配0个或以上的字符(注:能...

    字符串通配符

    描述
    问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。

    要求:
    实现如下2个通配符:
    * :匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同)
    :匹配1个字符

    注意:匹配时不区分大小写。

    输入:
    通配符表达式;
    一组字符串。
    输出:

    返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false
    注意:本题含有多组样例输入!
    数据范围:数据组数:1<=t<=10,字符串长度:1<=s<=100
    进阶:时间复杂度:O(n^2),空间复杂度:O(n)
    输入描述:
    先输入一个带有通配符的字符串,再输入一个需要匹配的字符串

    输出描述:
    返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false

    示例1
    输入:

    te?t*.*
    txt12.xls
    

    输出:
    false

    示例2
    输入:

    z
    zz
    

    输出:
    false

    示例3
    输入:

    pq
    pppq
    

    输出:
    false

    示例4
    输入:

    **Z
    0QZz
    

    输出:
    true

    示例5
    输入:

    ?*Bc*?
    abcd
    

    输出:
    true

    示例6
    输入:

    h*?*a
    h#a
    

    输出:
    false

    说明:
    根据题目描述可知能被*和?匹配的字符仅由英文字母和数字0到9组成,所以?不能匹配#,故输出false
    示例7
    输入:

    p*p*qp**pq*p**p***ppq
    pppppppqppqqppqppppqqqppqppqpqqqppqpqpppqpppqpqqqpqqp
    

    输出:
    false

    动态规划

    dp[i][j]表示pattern前i个字符和字符串str前j个字符的的匹配情况,如果匹配,dp[i][j]=1;如果不匹配,dp[i][j]=0。初始化动态数组dp[0][0]=1,遍历一遍动态数组,假设patterni个字符为ch1str数组第j个字符为ch2,:

    如果ch1,可以匹配或者不匹配。如果用*去匹配字符的话,dp[i][j]=dp[i][j-1];如果忽略 ,则dp[i][j]=dp[i-1][j]
    如果ch1不为,考虑ch2的情况,如果ch2为数字,那么ch1必须为?或者和ch2相同的数字才能匹配成功;如果ch2为字母,那么ch1必须为?或者和ch2的大小写字母才能匹配成功;如果ch2既不为数字也不为字母,那么ch1必须和ch2相同才能匹配成功。
    用以上方法更新dp数组,最后dp[pattern.size()][str.size()]表示两个字符串的匹配结果。
    在这里插入图片描述

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    int match(string patten,string str){
    	int n=patten.size(); int m=str.size();
    	vector<vector<int>> dp(n+1,vector<int>(m+1,0));
    	dp[0][0]=1;
    	for(int i=1;i<=n;++i){
    		char ch1=patten[i-1];
    		dp[i][0]=dp[i-1][0]&&(ch1=='*');
    		for(int j=1;j<=m;++j){
    			char ch2=str[j-1];
    			if(ch1=='*'){
    				dp[i][j]=dp[i-1][j] || dp[i][j-1];
    			}
    			else {
    				if(isalpha(ch2)){
    					dp[i][j]=dp[i-1][j-1] &&(ch1==ch2 || ch1=='?' 
    					|| (ch1==ch2-('a'-'A')) || ch1==ch2+('a'-'A'));
    				}
    				else if(isdigit(ch2)){
    					dp[i][j]=dp[i-1][j-1]&&(ch1=='?'|| ch1==ch2);
    				}
    				else {
    					dp[i][j]=dp[i-1][j-1]&&(ch1==ch2);
    				}
    			}
    		}
    	}
    	return dp[n][m];
    }
    
    int main(){
    	string patten,str;
    	while(cin>>patten>>str){
    		int flag=match(patten,str);
    		if(flag) cout<<"true"<<endl;
    		else cout<<"false"<<endl;
    	}
    	return 0;
    }
    

    复杂度分析:

    时间复杂度:
    O(mn),需要遍历一遍dp数组。
    空间复杂度:
    O(mn),dp数组大小为mn。

    展开全文
  • 主要介绍了Python 实用技巧之利用Shell通配符字符串匹配的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • python - 通配符

    千次阅读 2021-04-26 20:54:41
    : 代表单个字符.: 当前目录…:当前目录的上一级目录[0-9]: 单个字符为0~9[a-z]:单个字符为a~z[A-Z]:单个字符为A~Z[A-Za-z]:A~Z a~z[0-9A-Za-Z]0~9 A~Z a~z[[:digit:]][[:upper:]][[:lower:]][[:space:]]glob官方解读...
  • 内容索引:VC/C++源码,字符处理,通配符,算法 vc++ 带通配符的字符串匹配算法实例源代码,用"*" 和 "?"进行字符串的匹配查找。... 通配符意义:‘*’代表任意字符串,包括空字符串;‘?代表任意一个字符,不能为空;
  • vc++ 带通配符的字符串匹配算法实例源代码,用"*" 和 "?"进行字符串的匹配查找。直接拷贝代码就能使用。部分函数功能:带通配符的... 通配符意义:‘*’代表任意字符串,包括空字符串;‘?代表任意一个字符,不能为空;
  • 通配符

    2021-01-07 06:05:20
    通配符 标签(空格分隔): linux基础 ...#任意一个字符通配符 # #注释 & #让程序或脚本切换到后台执行 && #并且 同时成立 [] #表示一个范围(正则,通配符) {} #产生一个序列(通配符
  • 在Oracle中:%(百分号): 用来表示任意数量的字符,或者可能根本没有字符。_(下划线): 表示确切的未知字符。?(问号): 用来表示确切的未知字符。#(井号): 用来表示确切的阿拉伯数字,0到9。[a-d](方...
  • 和*,我想知道关于通配符的所有用法,下面的介绍应该是比较全的了,可以参考: Excel中勾选使用通配符复选框 任意单个字符:? 任意数字(单个):[0-9] 任意英文字母:[a-zA-Z] 段落标记:^13 手动换行符:^l or ^11 ...
  • % '*' 通配符代表任意数量(包括零)的字符。 % 这 '?' 通配符代表单个字符。 % % 用法: % IDX = WILDSEL(ARRAY) 返回所选项目的索引 IDX % 字符串数组 ARRAY。 % % 例子: % A = {'世界你好!'; '世界再见!'...
  • WPS 通配符使用全局替换,WPS 中文匹配,WPS正则使用
  • 通配符在shell中的使用,让你可以用模式匹配目录,文件名,不用挨个目录,文件指定具体的名字 通配符 * 代表了零个或多个任意字符。 常用的“ls”就可直接用来测试通配符。 ...
  • vc 带通配符的字符串匹配算法实例源代码,用"*" 和 "?"进行字符串的匹配查找。直接拷贝代码就能使用。部分函数功能:带通配符的... 通配符意义:‘*’代表任意字符串,包括空字符串;‘?代表任意一个字符,不能为空;
  • 表示任意字符,也就是说?永远可以匹配成功,本质上,只要遇到?就一定匹配*的本质,是分割字符串,即如果P=P1*P2,即P得匹配条件是匹配P1串之后,再匹配P2子串*///@param src[], 带匹配的字符串//@para...
  • 【每日一题】字符通配符

    千次阅读 2022-03-28 23:23:37
    现要求各位实现字符通配符的算法。 要求: 实现如下2个通配符: :匹配0个或以上的字符(注:能被和?匹配的字符仅由英文字母和数字0到9组成,下同) ?:匹配1个字符 注意:匹配时不区分大小写。 输入: 通配符...
  • 正则表达式匹配任意字符的写法

    千次阅读 2020-01-11 13:18:36
    “代表的是除换行以外的任意字符,如果要真正代表任意字符,需要把换行符也加进去,但是经过测试”[.\n]“不生效,可以使用”\s\S"代表,即所有空字符+所有非空字符。 注:为了适用于java程序,上述表达式已把斜杠...
  • 大纲1、文件名匹配2、LIKE操作符3、使用正则表达式一、文件名匹配...比如我想查看后缀名为.txt的所有文件:#ls*.txt通常支持的通配符有:* 匹配任意字符任意次? 仅匹配任意单个字符[0-9a-zA-Z] 字符集,匹配任意列出...
  • sql中经常用like进行模糊查询,而模糊查询就要用到百分号“%”,下划线“_”这些通配符,其中“%”匹配任意多个字符,“_”匹配单个字符。如果我们想要模糊查询带有通配符字符串,如“60%”,“user_name”,就...
  • 常用转义字符通配符和正则表达式转义字符:shell的其他特殊字符通配符和正则表达式:通配符:正则表达式: 转义字符: 有时候,我们想让 通配符,或者元字符 变成普通字符,不需要使用它。那么这里我们就需要...
  • ·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bnc·b,b字符串为asdfgvbbnchb,则这俩个字符串匹配。...
  • ‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明 s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 题目链接 思路 递归 ...
  • 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,...
  • 第6关:任意字符

    2022-04-26 22:18:46
    该程序可以判断该字符串是否包含(任意字符)ython的子字符串,并输出匹配到的结果。 相关知识 为了完成本关任务,你需要掌握: 正则表达式通配符的使用; python正则表达式编程。 通配符 在生活中我们经常会有这么一...
  • Shell字符通配符

    千次阅读 2019-02-13 16:19:33
    Shell提供了一套完整的字符串匹配规则。我们在使用find,ps等等命令或者编写脚本时,经常会用到字符串的模糊匹配功能。 常用的特殊字符: * 匹配文件名中的任何字符串,包括空字符串。 ? 匹配文件名中的任何单个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 107,496
精华内容 42,998
关键字:

任意字符的通配符