社区
数据结构与算法
帖子详情
能否用正则表达式处理类似 A [B C]和 A B 以及 A C的匹配
zzyx
2003-03-18 10:28:54
有两个串,形式为 A [B C] 或者更多,[]代表其内部为或的关系
串一:zhang [peng ping]
串二:[zhao zhang][ping pang]
我想要实现的是对以上两个串,应该有串一的:zhang ping和串二的:zhang ping 匹配。
能否用正则表达式实现对以上串的匹配?怎么做?
或者有别的办法来处理?
哪位大侠出手吧?
...全文
79
9
打赏
收藏
能否用正则表达式处理类似 A [B C]和 A B 以及 A C的匹配
有两个串,形式为 A [B C] 或者更多,[]代表其内部为或的关系 串一:zhang [peng ping] 串二:[zhao zhang][ping pang] 我想要实现的是对以上两个串,应该有串一的:zhang ping和串二的:zhang ping 匹配。 能否用正则表达式实现对以上串的匹配?怎么做? 或者有别的办法来处理? 哪位大侠出手吧?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shshsh_0510
2003-03-27
打赏
举报
回复
我没太懂你的问题,不过好像类似词法分析。
你说的“ABC1234x“的二意性当然会存在。著名的lex处理这种二义性的方法是以下两条优先原则:
1、匹配最长的串
2、匹配规则表中位置靠前的
不知对你是否有帮助。
zzyx
2003-03-22
打赏
举报
回复
啊普
zzyx
2003-03-19
打赏
举报
回复
更正:上边的
a [ b c d] e 得到的一个组合
a b e
a c e
b d e
改为
a [ b c d] e 得到的一个组合
a b e
a c e
a d e
zzyx
2003-03-19
打赏
举报
回复
非常感谢以上的朋友的帮助。
TO: plainsong(伤心的风)
我想,按照你的思路,
用表达式:"ABC(1234)|(123)(4x)|(5y)"去匹配"ABC1234x"
是可以实现的。
但麻烦的是 ABC1234x也可能是另外一个类似ABC(1234)|(123)(4x)|(5y)的串。
可能我的表达不清除,再举例子:
以下a b c d e x y 等都代表一个不包括空格的字符串,[]代表其中的串是或的关系
a [ b c d] e 得到的一个组合
a b e
a c e
b d e
另外一个串
a [b x] [e y]的可能性为
a b e
a b y
a x e
a x y
则以上的 a b e为匹配的。
另外,我在遇到这个问题的时候才刚接触正则表达式,术语,符号都不清楚呢,所以才提问能否使用。
我现在已经把这个问题先处理掉了,就是按照我上边的例子的思路,对每个串顺序遍历,使用2维数组,保存分解出的字符串,然后再比较数组,判断。只是觉得比较笨。
TO:tarkey(天星)
KMP查找算法按我的理解比较时候直接从固定的串中找特定的串
在我的问题中我想不到如何应用
短歌如风
2003-03-19
打赏
举报
回复
你用的正则表达式的语法好怪呀!一般都是这样表达的:
"zhang (peng)|(ping)"
而"zhang [peng ping]"通常都匹配"zhang p"、"zhang e"、"zhang "等。
匹配时不应直接使用表达式字串,要先对它进行分析。如果只是解决你这个问题的话比较简单,你可以写两个类,一个负责简单的匹配(目标字串的左子串与指定字串相比较),一个负责用一个字串列表去依次进行简单匹配直到成功或全部失败。
在用列表匹配时可能会有多个成功的结果,你要按一个顺序继续后续的匹配,如果整个表达式匹配成功则成功,否则再选择下一个。如:
用表达式:"ABC(1234)|(123)(4x)|(5y)"去匹配"ABC1234x":
1:"ABC" 匹配 "ABC"成功,剩余字串:"1234x";
2:"(1234)|(123)"匹配"1234"成功,剩余字串:"x";
3:"(4x)|(5y)"匹配失败。重新第二步匹配。
4:"(1234)|(123)"匹配"123"成功,剩余字串:"4x";
5:"(4x)|(5y)"匹配"4x"成功。
一般实用的正则表达式语法都很复杂,很难用简单的方法实现。建议使用“解释器”模式。
tarkey
2003-03-19
打赏
举报
回复
你去看看KMP算法吧。。
zzwu
2003-03-18
打赏
举报
回复
想法如下:
char a='A';
char b={'B','C','D'};
char c={'E','F'};
for (i=0; i<3; i++)
for (j=0; j<2; j++)
println(a+b[i]+c[j]);
zzyx
2003-03-18
打赏
举报
回复
或者有办法能实现把如 A [B C D][E F]
这样的表达式转为
A B E
A B F
A C E
A C F
A D E
A D F
也好,有思路有分
zzyx
2003-03-18
打赏
举报
回复
谢谢zzwu(未名) 。
我想你的思路基本可行,但具体实现上还有些困难。
首先,A B C等等都是代表一个长串中的子串,分解有些麻烦,存储也麻烦
其次,每个串的具体长度是不固定的,存储上需要考虑的东西比较多
我能想到最土的办法实现,但是想找找有没有比较精巧的方法。
带你学会使用
正则表达式
内容简介:
正则表达式
,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。计算机科学的一个概念。
正则表达式
使用单个字符串来描述、
匹配
一系列符合某个句法规则的字符串。在很多文本编辑器里,
正则表达式
通常被用来检索、替换那些符合某个模式的文本。 本门课程主要讲解
正则表达式
的引用场景和一些基础用法,让大家对
正则表达式
有一个清晰地认识。 为什么需要掌握
正则表达式
?
正则表达式
非常灵活、而且功能非常强大,它可以迅速地用极简单的方式达到字符串的复杂控制。而对于刚接触的人来说,
正则表达式
比较晦涩难懂。这门课程可以非常快速的帮助大家理解
正则表达式
,以及掌握如何在实际场景中用到它。课程大纲: 为了让大家快速系统了解
正则表达式
知识,我为您总结了思维导图,帮您梳理学习重点,建议收藏!
正则表达式
精讲
内容简介:
正则表达式
,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。计算机科学的一个概念。
正则表达式
使用单个字符串来描述、
匹配
一系列符合某个句法规则的字符串。在很多文本编辑器里,
正则表达式
通常被用来检索、替换那些符合某个模式的文本。本门课程主要讲解
正则表达式
的引用场景和一些基础用法,让大家对
正则表达式
有一个清晰地认识。为什么需要掌握
正则表达式
?
正则表达式
非常灵活、而且功能非常强大,它可以迅速地用极简单的方式达到字符串的复杂控制。而对于刚接触的人来说,
正则表达式
比较晦涩难懂。这门课程可以非常快速的帮助大家理解
正则表达式
,以及掌握如何在实际场景中用到它。
正则表达式
的应用
本课程是《零基础学Java》课程的第七阶段课程,课程内容详实、细致,讲解通俗易懂!内容包括:
正则表达式
的概念,
正则表达式
的组成规则,及
正则表达式
的判断、分割、替换、获取功能,以及各种功能的练习。
MATLAB 2023:
正则表达式
介绍在MATLAB中使用
正则表达式
实现较复杂文本搜索的方法,包括给定一个
正则表达式
,在MATLAB中怎样使用该表达式的方法,以及编写
正则表达式
的各种语法规则的介绍。所在套餐:MATLAB核心知识点系列课程-CSDN程序员研修院,不断更新和增加课程。
彻底学会
正则表达式
基于结合实战案例,彻底搞懂
正则表达式
(含邮箱、手机、身份证等实战案例)。1. 初识
正则表达式
,了解
正则表达式
是什么。2. 正则的三大核心之 字符、数量、分组
匹配
。3. 常见实战练习题4. 正则的起始结束和转义5. Python的re模块的常见方法
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章