1
zhuangjia 2023-02-20 11:51:14 +08:00
感觉这种场景比较适合使用 chatGPT 了
|
2
lookStupiToForce 2023-02-20 12:03:42 +08:00
要满足题述要求的完备,需要对 A 和 B 这两个正则做形式化证明( A 可转化为 B ,属于 B 的特例,B 则不可转化为 A )
感觉这种工作得看学计算理论的那帮人有没有造出相应的轮子 |
3
Aruforce OP @lookStupiToForce A1 == B1 也行...
|
4
lookStupiToForce 2023-02-20 12:16:19 +08:00
英文讨论可以用 regex expression true subset 做关键词搜,不过搜出来的多是 SO 的问答或者其他讨论串
中文倒是有人写过代码解决方法,原理用的有限自动机判断是否等价 /包含(判断此人是个计算理论 /编译原理大神😂) wu-kan[.]cn/2020/07/03/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%85%B3%E7%B3%BB%E5%88%A4%E5%AE%9A/ OP 你有心思可以就着参考实现一下 |
5
learningman 2023-02-20 12:33:46 +08:00
简单的可以展开成 DFA 然后 dfs ,但是如果带环的话就不太好判了
|
6
ALLROBOT 2023-02-20 12:40:57 +08:00
把捕获组转换 python 的 list 、字典、字符串等数据格式,然后 if 判断完事
|
7
lyhang 2023-02-20 13:25:42 +08:00
import re
def is_subset(A1, B1): """ 判断 A1 是否完全是 B1 的子集 参数: A1: 列表,表示数据集合 A1 B1: 列表,表示数据集合 B1 返回值: 如果 A1 完全是 B1 的子集,返回 True ,否则返回 False """ # 将 B1 中的所有正则表达式编译成 pattern 对象 patterns = [re.compile(b) for b in B1] # 遍历 A1 中的所有元素,看是否能被 B1 中的正则表达式匹配 for a in A1: matched = False for p in patterns: if p.match(a): matched = True break # 如果 A1 中的某个元素不能被 B1 中的任何正则表达式匹配,那么 A1 不是 B1 的子集 if not matched: return False # 如果 A1 中的所有元素都能被 B1 中的正则表达式匹配,那么 A1 是 B1 的子集 return True |
8
mascteen 2023-02-20 13:29:59 +08:00 via Android
感觉可以用上范畴论了
|
9
iamqk 2023-02-20 13:34:55 +08:00
如果有 set 容器的话
把两个 set 合并,如果数目是 B1 的话 就可以判断了 |
10
xuanbg 2023-02-20 13:46:03 +08:00
单从正则字符串本身来判断的话,除非只是定义,否则应该是不准确的。因为特定目标数据会导致 A 和 B 符合定义上的交集,但实际上没有相交的数据,变成并集;或者 A 完全包含 B ,变成 B 是 A 的子集。
|
11
Aruforce OP @lookStupiToForce 周末 再仔细看下。。感觉有点像。。。
|