-
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 匹配任意字符(包括换行符)的正则表达式写法
2020-10-29 15:23:49Python 正则表达式匹配任意字符(包括换行符)的写法 -
通配符、正则表达式、python去重
2020-11-29 11:27:451.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)]
-
带任意长度通配符的模式匹配
2021-03-20 04:50:24提出了一个更普遍的问题, 带任意长度通配符的模式匹配问题(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
,遍历一遍动态数组,假设pattern
第i
个字符为ch1
,str
数组第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通配符做字符串匹配
2020-09-18 18:34:43主要介绍了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++ 带通配符的字符串匹配算法实例源代码
2021-03-15 16:32:49内容索引:VC/C++源码,字符处理,通配符,算法 vc++ 带通配符的字符串匹配算法实例源代码,用"*" 和 "?"进行字符串的匹配查找。... 通配符意义:‘*’代表任意字符串,包括空字符串;‘?代表任意一个字符,不能为空; -
vc++ 带通配符的字符串匹配算法实例源代码.zip
2020-08-03 13:03:12vc++ 带通配符的字符串匹配算法实例源代码,用"*" 和 "?"进行字符串的匹配查找。直接拷贝代码就能使用。部分函数功能:带通配符的... 通配符意义:‘*’代表任意字符串,包括空字符串;‘?代表任意一个字符,不能为空; -
通配符
2021-01-07 06:05:20通配符 标签(空格分隔): linux基础 ...#任意一个字符,通配符 # #注释 & #让程序或脚本切换到后台执行 && #并且 同时成立 [] #表示一个范围(正则,通配符) {} #产生一个序列(通配符) -
Oracle查询通配符做普通字符使用
2021-05-01 04:25:59在Oracle中:%(百分号): 用来表示任意数量的字符,或者可能根本没有字符。_(下划线): 表示确切的未知字符。?(问号): 用来表示确切的未知字符。#(井号): 用来表示确切的阿拉伯数字,0到9。[a-d](方... -
excel通配符查找 excel任意字母的通配符
2021-06-16 06:47:46和*,我想知道关于通配符的所有用法,下面的介绍应该是比较全的了,可以参考: Excel中勾选使用通配符复选框 任意单个字符:? 任意数字(单个):[0-9] 任意英文字母:[a-zA-Z] 段落标记:^13 手动换行符:^l or ^11 ... -
通配符选择:简单的 GUI 允许用户使用通配符搜索从字符串的单元格数组中进行选择-matlab开发
2021-05-31 02:46:33% '*' 通配符代表任意数量(包括零)的字符。 % 这 '?' 通配符代表单个字符。 % % 用法: % IDX = WILDSEL(ARRAY) 返回所选项目的索引 IDX % 字符串数组 ARRAY。 % % 例子: % A = {'世界你好!'; '世界再见!'... -
WPS通配符使用及汉字替换技巧.docx
2021-09-07 10:51:09WPS 通配符使用全局替换,WPS 中文匹配,WPS正则使用 -
让日常操作轻松点的shell通配符-任意字符匹配
2019-08-30 23:43:22通配符在shell中的使用,让你可以用模式匹配目录,文件名,不用挨个目录,文件指定具体的名字 通配符 * 代表了零个或多个任意字符。 常用的“ls”就可直接用来测试通配符。 ... -
带通配符的字符串匹配算法的 vc 源代码.rar
2019-07-09 12:06:36vc 带通配符的字符串匹配算法实例源代码,用"*" 和 "?"进行字符串的匹配查找。直接拷贝代码就能使用。部分函数功能:带通配符的... 通配符意义:‘*’代表任意字符串,包括空字符串;‘?代表任意一个字符,不能为空; -
[OpenJudge]带有通配符的字符串匹配
2021-03-15 01:04:08表示任意字符,也就是说?永远可以匹配成功,本质上,只要遇到?就一定匹配*的本质,是分割字符串,即如果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程序,上述表达式已把斜杠... -
MySQL入门-6:通配符匹配和正则表达式
2021-01-19 05:45:19大纲1、文件名匹配2、LIKE操作符3、使用正则表达式一、文件名匹配...比如我想查看后缀名为.txt的所有文件:#ls*.txt通常支持的通配符有:* 匹配任意字符任意次? 仅匹配任意单个字符[0-9a-zA-Z] 字符集,匹配任意列出... -
浅谈MySQL模糊查询中通配符的转义
2021-01-19 22:40:23sql中经常用like进行模糊查询,而模糊查询就要用到百分号“%”,下划线“_”这些通配符,其中“%”匹配任意多个字符,“_”匹配单个字符。如果我们想要模糊查询带有通配符的字符串,如“60%”,“user_name”,就... -
常用转义字符、通配符和正则表达式
2020-05-04 21:47:50常用转义字符、通配符和正则表达式转义字符:shell的其他特殊字符:通配符和正则表达式:通配符:正则表达式: 转义字符: 有时候,我们想让 通配符,或者元字符 变成普通字符,不需要使用它。那么这里我们就需要... -
·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?
2021-02-28 19:13:49·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bnc·b,b字符串为asdfgvbbnchb,则这俩个字符串匹配。... -
leetcode练习 通配符匹配
2020-12-21 19:11:03‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明 s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。 题目链接 思路 递归 ... -
正则匹配任意字符(常用正则表达式的书写)
2020-03-13 10:05:09匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,... -
第6关:任意字符
2022-04-26 22:18:46该程序可以判断该字符串是否包含(任意字符)ython的子字符串,并输出匹配到的结果。 相关知识 为了完成本关任务,你需要掌握: 正则表达式通配符的使用; python正则表达式编程。 通配符 在生活中我们经常会有这么一... -
Shell字符串通配符
2019-02-13 16:19:33Shell提供了一套完整的字符串匹配规则。我们在使用find,ps等等命令或者编写脚本时,经常会用到字符串的模糊匹配功能。 常用的特殊字符: * 匹配文件名中的任何字符串,包括空字符串。 ? 匹配文件名中的任何单个...