当前位置: 首页 > 面试题库 >

如何判断一个正则表达式是否匹配另一个正则表达式的子集?

娄振
2023-03-14
问题内容

我只是想知道是否可以使用一个正则表达式来匹配另一个,这是某种形式的:

['a-z'].match(['b-x'])
True

['m-n'].match(['0-9'])
False

正则表达式完全可以实现这种功能吗?我正在使用python进行工作,因此有关该re模块实现的任何建议都将有所帮助,但我将尽我所能获取有关正则表达式的信息。

编辑:好的,显然需要按顺序进行澄清!我绝对知道正常的匹配语法如下所示:

expr = re.compile(r'[a-z]*')
string = "some words"
expr.match(string)
<sRE object blah blah>

但是我想知道正则表达式是否能够匹配我在上面试图解释的非语法正确版本中的其他较不具体的表达式,bx中的任何字母始终是az中任何字母的子集(匹配)。我只是从尝试中知道这不是您可以通过在另一个编译表达式上调用一个编译表达式的匹配项来完成的,但是问题仍然存在:这完全可能吗?

让我知道是否仍然不清楚。


问题答案:

我认为-从理论上讲,要判断正则表达式是否A与正则表达式匹配的子集B,算法可以:

  1. 计算B“联合”的最小确定性有限自动机A|B
  2. 检查两个DFA是否相同。当且仅当A匹配B匹配的子集时,这才成立。

但是,在实践中这样做可能是一个重大项目。有诸如
从正则表达式构造最小状态DFA之类的解释,

但它们仅倾向于考虑数学上纯 的正则表达式
。为了方便起见,您还必须处理Python添加的扩展。此外,如果任何扩展名导致语言不规则(我不确定是否是这种情况),则可能无法处理这些扩展名。

但是你想做什么?也许有一种更简单的方法…?



 类似资料:
  • 问题内容: 如何匹配“ Hello world”或“ Hello World”形式的句子。该句子可能包含“-/数字0-9”。任何信息对我都会非常有帮助。谢谢。 问题答案: 这将做得很好。我对句子的定义:句子以非空格开头,以句点,感叹号或问号(或字符串结尾)结尾。标点符号后可能会有一个结束语。 这是输出: 正确地匹配所有这些(最后一个句子没有结尾标点符号),看起来似乎并不那么容易!

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 正则表达式如何匹配出这个字符串'calc(100vh - 420px)'中的数字420

  • 我们得到了一些这样的内容:

  • 给定下面的字符串 [NeMo(PROD)]10.10.100.100(EFA-B-3)[博科FC-Switch]传感器:电源#1(SNMP自定义表)关闭(无此名称(SNMP错误#2)) 我尝试获取多个匹配项以提取以下值: 因为我是正则表达式的初学者,所以我试图定义一些“规则”: 提取第一个圆括号内的第一个值,例如PROD 提取第一个闭合方括号和第二个开口圆括号之间的值,例如10.10.100.10

  • 主要内容:基本模式匹配,字符簇,确定重复出现基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: 这个模式包含一个特殊的字符 ^,表示该模式只匹配那些以 once 开头的字符串。例如该模式与字符串 "once upon a time" 匹配,与 "There once was