Skip to main content
 首页 » 编程设计

python之正则表达式返回部分结果

2024年11月01日38me-sa

正则表达式只返回部分结果

我有下面的正则表达式,它只返回部分结果 基本上我试图找到 2 个连续的单词后跟一个包含 至少1个大小写字母 至少一位数

我能够匹配结果,但只能得到前 2 个词而不是第三个词作为结果。似乎长度条件也没有按规定工作,即在 8 到 32 之间

def findWordandCode(w1, w2, sentence): 
 
  return re.search(r'\b{0}(?:\W+\w+){{0,1}}\W+{1}\s*(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]){{8,32}}'.format(w1, w2), sentence) 

例如。

findWordandCode('word1','word2','word1 word2, abcABC123! blah blah') 

这只返回word1 word2

预期结果:word1 word2 abcABC123!

请您参考如下方法:

按以下方式定义函数:

def findWordandCode(w1, w2, sentence): 
    m = re.search(r'\b{0}\s{1},\s' 
        '(?=\S*\d)(?=\S*[A-Z])(?=\S*[a-z])\S{{8,32}}(?=[\s|$])'\ 
        .format(w1, w2), sentence) 
    return m.group() if m else '' 

让我们从正则表达式开始描述:

  1. word1 ({0}) 和 word2 ({1}) 之间应该有一个空格, 或者可能是空格序列 (\s+)。
  2. 在 word2 之后必须有一个逗号和一个空格 (,\s)。
  3. 那么每个正面前瞻都应该在开始处有 \S* .*。有了一个点,这样的前瞻可以转到下一个单词,但是你 实际上应该检查当前单词。
  4. 对于数字、小写字母和大写字母进行了 3 次前瞻, 应该有与第三个单词匹配的部分 - 在 8 到 32 之间 非空格字符。
  5. 最后,为了避免出现更长的词,应该有另一个 对空格或字符串结尾的正向预测。

现在就整个功能而言:

  1. 从re.search 开始,但请记住,如果没有任何匹配项, 结果是无。
  2. 然后,如果找到匹配项,则将其返回 (m.group())。
  3. 如果不是,则返回空字符串(或选择另一个“失败”值, 例如无)。