正则表达式只返回部分结果
我有下面的正则表达式,它只返回部分结果 基本上我试图找到 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 ''
让我们从正则表达式开始描述:
- word1 (
{0}) 和 word2 ({1}) 之间应该有一个空格, 或者可能是空格序列 (\s+)。 - 在 word2 之后必须有一个逗号和一个空格 (
,\s)。 - 那么每个正面前瞻都应该在开始处有
\S*.*。有了一个点,这样的前瞻可以转到下一个单词,但是你 实际上应该检查当前单词。 - 对于数字、小写字母和大写字母进行了 3 次前瞻, 应该有与第三个单词匹配的部分 - 在 8 到 32 之间 非空格字符。
- 最后,为了避免出现更长的词,应该有另一个 对空格或字符串结尾的正向预测。
现在就整个功能而言:
- 从re.search 开始,但请记住,如果没有任何匹配项, 结果是无。
- 然后,如果找到匹配项,则将其返回 (
m.group())。 - 如果不是,则返回空字符串(或选择另一个“失败”值, 例如无)。
