python - 如何使用 python 中的正则表达式检查两个查询字符串(带通配符)是否存在

标签 python regex

我有两个查询字符串,它们都包含通配符。我们可以检查两个查询字符串中是否存在任何一个,如下所示:

import re
def wildcards2regex (pattern):
    return ( pattern.replace('?', '[a-zA-Z]{1}').replace('*', '.*') )

string = 'christopher susan'
s1='chris*'
r1 = wildcards2regex(s1)
s2 = 'sus??'
r2 = wildcards2regex(s2)
q = r1+'|'+r2
bool(re.search(q, string))

现在我想知道如果我想检查两个查询字符串是否都存在该怎么办?显然替换了“|”与 '&' 不起作用。有谁知道如何实现这一目标?

最佳答案

您可以考虑以下代码:

>>> import re
>>> def wildcards2regex (pattern):
...    return ( pattern.replace('?', '[a-zA-Z]').replace('*', '.*') )
...
>>> string = 'christopher susan'
>>> s1='chris*'
>>> r1 = wildcards2regex(s1)
>>> s2 = 'sus??'
>>> r2 = wildcards2regex(s2)
>>> q = re.compile(r'(?=.*{})(?=.*{})'.format(r1, r2))
>>> bool(re.search(q, string))
True

记下这个正则表达式构建:

q = re.compile(r'(?=.*{})(?=.*{})'.format(r1, r2))

这里我们正在构建一个正则表达式,其中使用 positive lookahead assertions 定义了 2 个条件。断言您的两个查询字符串。

关于python - 如何使用 python 中的正则表达式检查两个查询字符串(带通配符)是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66486501/

相关文章:

python - 试图将 mp3 文件转换为 Numpy 数组,而 ffmpeg 只是挂起

python - 无法使用scrapy从网页中获取不同列表的标题

regex - bash脚本删除文件名中的前缀

regex - Bash:如何从字符串中获取数字? (可能是正则表达式)

regex - 如何使用正则表达式匹配包含多个 url 的行中的最后一个 url?

python - 具有相同区域设置的不同 datetime.strftime 输出

python - 用 Python 3 编写 Cocoa 应用程序

python - 使用 Mock python 断言对方法的调用

java - 棘手的 Java 正则表达式来自 .. where

c# - 正则表达式嵌套括号在一种情况下不起作用